如何测量C#代码的运行时间
(1)用Datatime和TmeSpan
这个不说了,在要测量的代码前后加上2个DateTime.Now,2者相减,得到一个TmeSpan。
DateTime d = DateTime.Now;
for (int i = 0; i < 1000; i++)
{
?++i;
}
Console.WriteLine(DateTime.Now - d);
(2)用Stopwatch,简单,明了,精确。
// 使用 StopWatch 进行测量
Stopwatch sw = new Stopwatch();
sw.Start();
?
?for (int i = 0; i < 1000; i++) { ++i; }
sw.Stop();
Console.WriteLine(sw.Elapsed);
StopWatch?几个关键属性和方法。? Elapsed?:获取当前实例测量得出的总运行时间。在测试期间或者结束时均可获取。? IsRunning?:?获取一个指示?Stopwatch?计时器是否在运行的值。?? Start?:?开始或继续测量某个时间间隔的运行时间。?多次调用?Start?前,需要使用?Reset?重置,否则会累加多次测量结果。? Stop?:?停止测量某个时间间隔的运行时间。? Reset?:?停止时间间隔测量,并将运行时间重置为零。
(3)使用QueryPerformanceFrequency函数和QueryPerformanceCounter函数,这个比较麻烦,还用到了Interop。
?
using System;
class Class1
{
[System.Runtime.InteropServices.DllImport("Kernel32.dll")]
static extern bool QueryPerformanceCounter(ref long count);
[System.Runtime.InteropServices.DllImport("Kernel32.dll")]
static extern bool QueryPerformanceFrequency(ref long count);
[STAThread]
static void Main(string[] args)
{
long count = 0;
long count1 = 0;
long freq = 0;
double result = 0;
QueryPerformanceFrequency(ref freq);
QueryPerformanceCounter(ref count);
//开始的时候没有这层循环,所得数据浮动很大,添加这层循环来使得结果更加平均
for (int i = 0; i < 500; i++)
{
//需要测试的模块
}
QueryPerformanceCounter(ref count1);
count = count1 - count;
result = (double) (count) / (double) freq;
Console.WriteLine("耗时: {0} 秒",result);
Console.ReadLine();
}
}
(编辑:北几岛)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|