您好我想测量代码中函数的运行时间。我使用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.可以秒表测量同时运行的功能的运行时间吗?
答案 0 :(得分:2)
1.可以线程池减少运行时间或者我犯了错误吗?
害怕你弄错了。 QueueUserWorkItem
立即返回,允许当前线程在另一个线程上完成工作时继续。因此,在工作开始后立即调用w.Stop();
。它不等待工作项完成。因此,您有效地测量了将项目添加到队列所需的时间,而不是实际完成工作需要多长时间。
2.可以秒表测量同时运行的功能的运行时间吗?
您可以在函数内部启动/停止监视,或者具有代理功能,该代理功能是实际功能的代理。该委托可以使用开始/停止调用包装实际的函数/工作,并将结果时间发送到需要登录的位置。
答案 1 :(得分:1)
使用TreadPool,经过的时间只是排队工作项的时间(而不是执行它的时间),因为你不等待线程的结束。
对于第一个问题,您可以使用多个线程来提高性能,但在您的代码示例中,它几乎没有任何变化。
对于你的第二个问题,不,但是这个NuGet包可以帮助你:https://www.nuget.org/packages/MethodTimer.Fody/