可能的重复: 如何测量一个函数运行了多长时间?
我有一个I/O时间的方法,它将数据从一个位置复制到另一个位置。计算执行时间的最佳和最真实的方法是什么?的线程吗?计时器吗?秒表吗?还有其他解决方案吗?我想要最精确的,尽可能简短的。
可能的重复: 如何测量一个函数运行了多长时间?
我有一个I/O时间的方法,它将数据从一个位置复制到另一个位置。计算执行时间的最佳和最真实的方法是什么?的线程吗?计时器吗?秒表吗?还有其他解决方案吗?我想要最精确的,尽可能简短的。
当前回答
您还可以使用这个,“获取自系统启动以来经过的毫秒数”。
System.Environment.TickCount
例如
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));
}
其他回答
秒表将使用高分辨率计数器
秒表测量流逝的时间计数计时器滴答滴答 底层计时器机制。如果硬件已安装并运行正常 系统支持高分辨率的性能计数器 Stopwatch类使用该计数器来测量经过的时间。否则, Stopwatch类使用系统计时器来测量经过的时间。使用 Frequency和IsHighResolution字段来确定精度 以及秒表计时实现的决议。
如果你正在测量IO,那么你的数据可能会受到外部事件的影响,我担心re.精确性(正如你上面所指出的)。相反,我会进行一系列测量,并考虑这些数字的平均值和分布。
下面是微软文档:
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);
}
}
输出: 运行时00:00:09.94
秒表类寻找您的最佳解决方案。
Stopwatch sw = Stopwatch.StartNew();
DoSomeWork();
sw.Stop();
Console.WriteLine("Time taken: {0}ms", sw.Elapsed.TotalMilliseconds);
它还有一个名为Stopwatch.IsHighResolution的静态字段。当然,这是一个硬件和操作系统的问题。
指示计时器是否基于高分辨率性能 计数器。
如果您对了解性能感兴趣,最好的答案是使用分析器。
否则,System.Diagnostics.StopWatch提供了一个高分辨率的计时器。
您还可以使用这个,“获取自系统启动以来经过的毫秒数”。
System.Environment.TickCount
例如
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));
}