运行 c# .NET4.0 中 Threadpool 的时间

Run time of Threadpool in c# .NET4.0

您好,我想测量代码中函数的 运行 时间。我将线程池用于 运行 宁该功能。

System.Diagnostics.Stopwatch w = new System.Diagnostics.Stopwatch();
        w.Start();
        ThreadPool.QueueUserWorkItem(new WaitCallback(f));
        w.Stop();
        label1.Text = w.Elapsed.ToString();

f(){ //array.sort()}

f() 对一些数字进行排序。

示例:对于 60000000 个数字的秒表 shows:with 线程池 00:00:00.0003201 但没有线程的性能 00:00:06.8651903 ???

对于 1000 个带有线程池的数字 00:00:00.0001801 和 whitout 它 00:00:00.0011956 ???

现在我有一些问题吗?

1.could 线程池减少 运行 时间还是我弄错了?

2.could 秒表同时测量 运行 功能的 运行 时间?

1.could threadpool decrease the run time or i made a mistake?

怕你弄错了。 QueueUserWorkItem returns 立即允许当前线程在另一个线程上完成工作时继续。因此 w.Stop(); 在工作开始后立即被调用。它不会等待工作项完成。因此,您有效地衡量了将项目添加到队列中所花费的时间,而不是完成工作实际花费的时间。

2.could stopwatch measure the run time of functions that run simultaneously?

您可以 start/stop 函数内部的监视,或者有一个委托函数作为实际函数的代理。这个委托可以用 start/stop 调用包装实际的 function/work 并将结果时间发送到需要记录的地方。

使用 TreadPool,经过的时间只是工作项排队的时间(不是执行它的时间),因为您不需要等待线程结束。

对于你的第一个问题,你可以使用多线程来提高性能,但在你的代码示例中,它几乎没有任何改变。

对于你的第二个问题,不,但也许这个 NuGet 包可以帮助你:https://www.nuget.org/packages/MethodTimer.Fody/