Joe Duffy 在 MSDN 文章“ Using concurrency for scaling ”中指出,创建线程的成本约为 200,000 个周期,而销毁的成本约为 100,000 个周期。
当我尝试创建一个新线程来执行一些计算时,我想确保计算本身比 200,000 个周期更昂贵。
我如何测量 CPU 周期?我认为这比测量执行时间更有趣。
Joe Duffy 在 MSDN 文章“ Using concurrency for scaling ”中指出,创建线程的成本约为 200,000 个周期,而销毁的成本约为 100,000 个周期。
当我尝试创建一个新线程来执行一些计算时,我想确保计算本身比 200,000 个周期更昂贵。
我如何测量 CPU 周期?我认为这比测量执行时间更有趣。
您可以使用像 Intel 的 Vtune 之类的采样分析器来测量消耗了多少 CPU 周期,同时对被测系统的干扰量最小。
然而,当使用线程时,目标是避免不必要地产生新线程。研究使用线程池。这将允许您异步运行工作项,但不必为每个项生成一个新线程。
我会检查 System.Diagnostic 命名空间。它有很多关于跟踪内存和 cpu 使用情况的东西。
几天前我问了一个密切相关的问题,但还没有找到一种方法来衡量代码的实际 CPU 周期使用情况: 限制程序集执行的 CPU 周期数
在您的情况下,您是否可以不运行计算分析并查看单个计算需要多少时间,并将其与生成执行计算的线程然后杀死线程的总时间进行比较?
这是计算 CPU 周期的问题。不同的 CPU 需要不同数量的周期来执行相同的指令。因此,IMO 的度量标准不太可靠。我认为您应该测量的是执行时间,而在 .NET 中,您使用 System.Environment.TickCount 来完成此操作。我认为这是你所拥有的最好的...