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

时间:2015-04-01 02:25:37

标签: c# multithreading sorting threadpool stopwatch

您好我想测量代码中函数的运行时间。我使用threadpool来运行该函数。

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数字秒表显示:使用线程池00:00:00.0003201但性能白化线程00:00:06.8651903 ???

对于1000个带有线程池00:00:00.0001801的数字并将其白化为00:00:00.0011956 ???

现在我有一些问题吗?

1.可以线程池减少运行时间或者我犯了错误吗?

2.可以秒表测量同时运行的功能的运行时间吗?

2 个答案:

答案 0 :(得分:2)

  

1.可以线程池减少运行时间或者我犯了错误吗?

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

  

2.可以秒表测量同时运行的功能的运行时间吗?

您可以在函数内部启动/停止监视,或者具有代理功能,该代理功能是实际功能的代理。该委托可以使用开始/停止调用包装实际的函数/工作,并将结果时间发送到需要登录的位置。

答案 1 :(得分:1)

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

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

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