我正在编写一个多线程C#/ .Net应用程序来控制工业流程。需要执行许多计算密集型任务,其中许多任务可以并行完成,而对共享对象的争用很少。所以这是一个产生多个线程以提高性能的好机会。
如何衡量/监控/测试线程负载性能,以确保我在我创建的所有线程之间以最佳方式平衡工作,因此所有线程都充分利用了从调度程序获得的最大时间片,以及它们不要花太多时间停下来或等待?
FWIW我正在使用VS2010专业版
答案 0 :(得分:0)
您可以使用PerformanceCounter类来衡量CPU使用情况。
如果您的负载在多个CPU核心之间得到很好的平衡,那么如果没有瓶颈(例如磁盘或网络访问),则全局CPU应该以100%运行。如果某个线程等待资源或被阻止,您应该注意它在CPU使用级别。
但是在调试过程中使用taskmgr.exe非常容易。
如果您想要对线程等待进行细粒度分析,可以通过注册一个WaitOrTimerCallback 来挂钩ThreadPool,以便在线程超时时收到通知。但请记住,线程有时等待是正常的,你想要的是最大化CPU使用率,而不是最小化线程等待(是的,在最坏的情况下,你可以通过线程操作使CPU饱和,但是如果你坚持使用相同的数字线程比逻辑CPU核心,它会没事的