Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 测量线程开销_.net_Performance_Multithreading_Concurrency - Fatal编程技术网

.net 测量线程开销

.net 测量线程开销,.net,performance,multithreading,concurrency,.net,Performance,Multithreading,Concurrency,Joe Duffy在MSDN文章“”中指出,创建线程的成本约为200000个周期,销毁线程的成本约为100000个周期 当我尝试创建一个新线程来执行一些计算时,我希望确保计算本身比200000个周期更昂贵 如何测量CPU周期?我认为这比测量执行时间更有趣。我会检查System.Diagnostic名称空间。它有很多关于跟踪内存和cpu使用情况的内容。几天前我问了一个密切相关的问题,但还没有找到一种方法来测量代码的实际cpu周期使用情况: 在您的情况下,您是否可以运行计算的分析并查看单个计算所需

Joe Duffy在MSDN文章“”中指出,创建线程的成本约为200000个周期,销毁线程的成本约为100000个周期

当我尝试创建一个新线程来执行一些计算时,我希望确保计算本身比200000个周期更昂贵


如何测量CPU周期?我认为这比测量执行时间更有趣。

我会检查System.Diagnostic名称空间。它有很多关于跟踪内存和cpu使用情况的内容。

几天前我问了一个密切相关的问题,但还没有找到一种方法来测量代码的实际cpu周期使用情况:


在您的情况下,您是否可以运行计算的分析并查看单个计算所需的时间,并将其与生成一个执行计算的线程并随后终止该线程的总时间进行比较?

您可以使用像英特尔Vtune这样的采样探查器,来测量在系统受到最小干扰的情况下消耗了多少CPU周期


但是,当使用线程时,目标是避免不必要地产生新线程。研究一下如何使用。这将允许您异步运行工作项,但不必为每个项生成新线程。

这里是计算CPU周期的问题。不同的CPU采用不同的周期数来实现相同的指令。因此,在我看来,这不是一个非常可靠的指标。我认为您应该衡量的是执行时间,在.NET中,您可以使用System.Environment.TickCount来实现这一点。我认为这是您所拥有的最好的…

线程池只是池现有线程;如果仍然没有创建线程,那么创建成本与我不使用任何线程池的成本相同。是的,如果您这样做或线程池这样做,那么创建线程的成本相同。但是线程池通过保留一些空闲线程来帮助避免不必要的创建。如果您的工作项足够小,需要避免创建成本,那么它们听起来非常适合线程池。您可能应该将指令缓存刷新的成本添加到使用线程的成本中。