运行 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/
您好,我想测量代码中函数的 运行 时间。我将线程池用于 运行 宁该功能。
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/