我需要以某种方式限制这些程序集可用的处理器运算能力。我不是在寻找处理器优先级。我不能使用秒表并分配一定时间让程序集运行,因为服务器可能会任意繁忙。
最理想的情况是我可以指定一些完全独立于负载的CPU使用度量。如果必要,我可以在它们自己的进程中运行这些程序集。
是否有办法以某种方式测量给定线程(或进程,尽管线程是最佳选择)的总CPU使用率?
我可以使用进程性能计数器吗?还是它们像我怀疑的那样不太可靠?虽然我不需要精确到周期的准确性,但我需要相当高的准确性来限制分配给每个程序集执行的计算能力。
稍微解释一下我的情况。我没有寻找进程优先级的原因是我不担心耗尽资源,我只需要确保我可以衡量每个程序集使用了多少资源 - 因此我提到服务器可能任意繁忙。
想象一下这样的场景:你有两个程序集X和Y。它们中的每一个实现了一个给定算法,我想做一个简单的测试,看看哪个程序集能够最快地完成任务。我运行每个程序集并让它一直运行,直到使用了“Z”个资源,然后评估哪个程序集执行得最好。在这种情况下,如果一个程序集在三秒钟内以100%的CPU运行,而另一个程序集在5分钟内以2%的CPU运行,我并不介意 - 重要的是总资源使用量。
我正在考虑使用CPU时间性能计数器来进行粗略限制。在新线程中运行每个程序集,并让它运行,直到它使用了一定量的CPU时间,然后我将杀死该进程并评估结果。我只是担心它不够准确。
GetProcessTimes
或QueryProcessCycleTime
(仅适用于 Vista 或更高版本)来计算 CPU 的总使用率。 - rwong