如何使用秒表测量执行代码所花费的实际时间 CPU?
How to measure actual time CPU spent executing the code using the stopwatch?
我的部分研究项目是使用秒表来测量时间。
每个秒表用于不同的任务以测量 while 循环应该工作多长时间。
不知我放了很多长任务,这个措施会不会
准确。
创意代码示例:
public static void run(){
var tasks= new List<Task<int>>();
foreach(var task in taskList) //taskList is global object with 10 variables inside
tasks.Add(Task.Factory.StartNew<int>(()=>taskFunction(task)));
Task.WaitAll(tasks.ToArray());
}
private int taskFunction(task) {
Stopwatch watch = new Stopwatch();
while (watch.ElapsedMilliseconds < MaxTime * 1000)
{
watch.Start();
doSomething(); // takes lot of time;
watch.Stop();
doSomethingDiffrent();
}
}
所以我将创建大约 10 个任务。如果任务不是由处理器计算的,秒表中的时间 运行 和浪费?
If task is not calculted by procesor will time in stopwatch run and waste.
如果您查看 System.Diagnostics.Stopwatch
的源代码,您会发现它实际上没有 运行,没有浪费。它有两个时间戳 start
和 end
,它实际上通过计算和添加它们之间的周期来计算 elapsed
。请注意,您可以多次启动和停止 Stopwatch
,它将测量这些 运行 之间的累积时间。所以答案是是它也会计算线程不活动的时间。
另外,在多处理器环境中 运行ning Stopwatch
时你应该小心:
On a multiprocessor computer, it does not matter which processor the thread runs on. However, because of bugs in the BIOS or the Hardware Abstraction Layer (HAL), you can get different timing results on different processors. To specify processor affinity for a thread, use the ProcessThread.ProcessorAffinity
method.
另一方面,如果您想测量 CPU 执行代码花费了多少时间,请查看以下内容 link:ExecutionStopwatch. It basically leverages the usage of the GetThreadTimes
并测量线程花费了多少时间运行在内核或用户模式下结合在一起。
如果您处于调试模式,则可以使用诊断工具
当您的应用程序启动时,转到菜单:
调试 --> Windows --> 显示诊断工具
我的部分研究项目是使用秒表来测量时间。
每个秒表用于不同的任务以测量 while 循环应该工作多长时间。
不知我放了很多长任务,这个措施会不会 准确。
创意代码示例:
public static void run(){
var tasks= new List<Task<int>>();
foreach(var task in taskList) //taskList is global object with 10 variables inside
tasks.Add(Task.Factory.StartNew<int>(()=>taskFunction(task)));
Task.WaitAll(tasks.ToArray());
}
private int taskFunction(task) {
Stopwatch watch = new Stopwatch();
while (watch.ElapsedMilliseconds < MaxTime * 1000)
{
watch.Start();
doSomething(); // takes lot of time;
watch.Stop();
doSomethingDiffrent();
}
}
所以我将创建大约 10 个任务。如果任务不是由处理器计算的,秒表中的时间 运行 和浪费?
If task is not calculted by procesor will time in stopwatch run and waste.
如果您查看 System.Diagnostics.Stopwatch
的源代码,您会发现它实际上没有 运行,没有浪费。它有两个时间戳 start
和 end
,它实际上通过计算和添加它们之间的周期来计算 elapsed
。请注意,您可以多次启动和停止 Stopwatch
,它将测量这些 运行 之间的累积时间。所以答案是是它也会计算线程不活动的时间。
另外,在多处理器环境中 运行ning Stopwatch
时你应该小心:
On a multiprocessor computer, it does not matter which processor the thread runs on. However, because of bugs in the BIOS or the Hardware Abstraction Layer (HAL), you can get different timing results on different processors. To specify processor affinity for a thread, use the
ProcessThread.ProcessorAffinity
method.
另一方面,如果您想测量 CPU 执行代码花费了多少时间,请查看以下内容 link:ExecutionStopwatch. It basically leverages the usage of the GetThreadTimes
并测量线程花费了多少时间运行在内核或用户模式下结合在一起。
如果您处于调试模式,则可以使用诊断工具
当您的应用程序启动时,转到菜单:
调试 --> Windows --> 显示诊断工具