对代码性能进行调试和量测
在研究数据结构和算法的时候,或者你仅仅是在对某段代码的性能心存疑惑想找到问题所在的时候,我们通常都需要能度量和比较代码执行的耗时。大部分时候,我们都可以通过下面这个简单的手段来实现该目的。
第一步:定义一个Timing类,用来辅助我们进行一些性能方面的比较(主要监控时间)
using System; using System.Diagnostics; public class Timing { TimeSpan startingTime; TimeSpan duration; public Timing() { startingTime = new TimeSpan(0); duration = new TimeSpan(0); } public void StartTime() { GC.Collect(); GC.WaitForPendingFinalizers(); startingTime = Process.GetCurrentProcess().Threads[0].UserProcessorTime; } public void StopTime() { duration = Process.GetCurrentProcess().Threads[0].UserProcessorTime.Subtract(startingTime); } public TimeSpan Result { get { return duration; } } }
第二步: 具体使用的方法
class Program { static void Main(string[] args) { int[] numbers = new int[100000]; Timing timing = new Timing(); timing.StartTime(); BuildArray(ref numbers); DisplayNumbers(numbers); timing.StopTime(); Console.WriteLine(); Console.WriteLine("总计耗时为:{0}秒",timing.Result.TotalSeconds); Console.Read(); } private static void DisplayNumbers(int[] numbers) { for (int i = 0; i < numbers.GetUpperBound(0); i++) { Console.Write(numbers[i]); } } private static void BuildArray(ref int[] numbers) { for (int i = 0; i < numbers.GetUpperBound(0); i++) { numbers[i] = i * (new Random()).Next(); } } }
最后输出的结果可能是这样的
要注意到问题
1. 在Visual Studio 调试中是看不到效果的,因为其实在调试中是没有独立的进程的,是由Visual Studio进行宿主
2. 即便在代码中使用到了Thread.Sleep方法(线程休眠),也不会影响到最后输出的时间。因为我们是统计CPU时间,线程如果休眠,CPU并不需要占用时间
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人