是DateTime.Now是测量函数性能的最佳方法吗?

好久不见. 提交于 2020-02-25 15:42:54

我需要找到一个瓶颈,并且需要准确地测量时间。

以下代码段是衡量性能的最佳方法吗?

DateTime startTime = DateTime.Now;

// Some execution process

DateTime endTime = DateTime.Now;
TimeSpan totalTimeTaken = endTime.Subtract(startTime);

#1楼

我刚刚在Vance Morrison的博客中发现了一篇关于他编写的CodeTimer类的帖子,该类使得使用StopWatch变得更容易并且做了一些整洁的东西。


#2楼

Visual Studio Team System具有一些可能有助于解决此问题的功能。 基本上,您可以编写单元测试并将它们混合在不同的场景中,以作为压力或负载测试的一部分运行。 这可能有助于确定最能影响应用程序性能的代码区域。

Microsoft的模式和实践组在Visual Studio Team System性能测试指南中有一些指导。


#3楼

我在程序中使用的方式是使用StopWatch类,如下所示。

Stopwatch sw = new Stopwatch();
sw.Start();


// Critical lines of code

long elapsedMs = sw.Elapsed.TotalMilliseconds;

#4楼

这不够专业:

Stopwatch sw = Stopwatch.StartNew();
PerformWork();
sw.Stop();

Console.WriteLine("Time taken: {0}ms", sw.Elapsed.TotalMilliseconds);

更可靠的版本是:

PerformWork();

int repeat = 1000;

Stopwatch sw = Stopwatch.StartNew();
for (int i = 0; i < repeat; i++)
{
   PerformWork();
}

sw.Stop();

Console.WriteLine("Time taken: {0}ms", sw.Elapsed.TotalMilliseconds / repeat);

在我的实际代码中,我将添加GC.Collect调用以将托管堆更改为已知状态,并添加Sleep调用,以便可以在ETW配置文件中轻松分隔不同的代码间隔。


#5楼

秒表功能会更好(精度更高)。 我也建议只下载一个流行的分析器,但是( DotTraceANTS是我最常用的...... DotTrace的免费试用功能完全正常,并不像其他一些人那样唠叨)。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!