Dar*_*rov 1038
Stopwatch 是为此目的而设计的,是衡量.NET中时间执行的最佳方法之一.
var watch = System.Diagnostics.Stopwatch.StartNew();
// the code that you want to measure comes here
watch.Stop();
var elapsedMs = watch.ElapsedMilliseconds;
Run Code Online (Sandbox Code Playgroud)
不要使用DateTime来测量.NET中的时间执行.
更新:
正如@ series0ne在评论部分所指出的:如果您想要对某些代码的执行进行真正精确的测量,则必须使用内置于操作系统中的性能计数器.在以下的答案必须包含一个很好的概述.
ser*_*0ne 72
从个人的经验来看,System.Diagnostics.Stopwatch类可以用来测量方法的执行时间,但是当心:这是不完全准确!
请考虑以下示例:
Stopwatch sw;
for(int index = 0; index < 10; index++)
{
sw = Stopwatch.StartNew();
DoSomething();
Console.WriteLine(sw.ElapsedMilliseconds);
}
sw.Stop();
Run Code Online (Sandbox Code Playgroud)
示例结果
132ms
4ms
3ms
3ms
2ms
3ms
34ms
2ms
1ms
1ms
Run Code Online (Sandbox Code Playgroud)
现在你想知道; "那么为什么第一次需要132毫秒,其余时间显着减少?"
答案是Stopwatch不能补偿.NET中的"背景噪音"活动,例如JITing.因此,第一次运行方法时,.NET JIT首先运行它.执行此操作所需的时间将添加到执行时.同样,其他因素也会导致执行时间发生变化.
您应该真正寻求绝对准确性的是性能分析!
看看以下内容:
RedGate ANTS Performance Profiler是一种商业产品,但可以产生非常准确的结果.- 使用.NET分析提高应用程序的性能
这是关于分析的StackOverflow文章: - 什么是一些好的.NET Profilers?
我还写了一篇关于使用秒表的性能分析的文章,你可能想看一下 - 在.NET中进行性能分析
Son*_*nül 28
StopWatch 课程寻找最佳解决方案.
Stopwatch sw = Stopwatch.StartNew();
DoSomeWork();
sw.Stop();
Console.WriteLine("Time taken: {0}ms", sw.Elapsed.TotalMilliseconds);
Run Code Online (Sandbox Code Playgroud)
它还有一个名为的静态字段Stopwatch.IsHighResolution.当然,这是硬件和操作系统问题.
指示计时器是否基于高分辨率性能计数器.
小智 7
您还可以使用“获取自系统启动以来经过的毫秒数”。
System.Environment.TickCount
Run Code Online (Sandbox Code Playgroud)
例如
static void method1()
{
for (int i = 1; i <= 100; i++)
{
Console.WriteLine("Test1 " + i);
}
}
static void Main(string[] args)
{
var startTime = Environment.TickCount;
method1();
var endTime = Environment.TickCount;
Console.WriteLine("RunTime " + (endTime - startTime));
}
Run Code Online (Sandbox Code Playgroud)
小智 5
遵循此Microsoft Doc:
using System;
using System.Diagnostics;
using System.Threading;
class Program
{
static void Main(string[] args)
{
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
Thread.Sleep(10000);
stopWatch.Stop();
// Get the elapsed time as a TimeSpan value.
TimeSpan ts = stopWatch.Elapsed;
// Format and display the TimeSpan value.
string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
ts.Hours, ts.Minutes, ts.Seconds,
ts.Milliseconds / 10);
Console.WriteLine("RunTime " + elapsedTime);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
RunTime 00:00:09.94
| 归档时间: |
|
| 查看次数: |
470033 次 |
| 最近记录: |