我有一个项目可以动态加载实现指定接口的未知程序集。除了实现我的接口之外,我不知道程序集的内容或目的。
我需要以某种方式限制这些组件可用的处理能力。处理器优先级不是我想要的。我不能使用秒表并为程序集分配一定的时间来运行,因为服务器可能会很忙。
理想情况下,我想指定一些完全独立于负载的 CPU 使用量度量。如有必要,我可以在自己的进程中运行程序集。
有没有办法以某种方式测量给定线程(或进程,尽管线程是最佳的)的总超时 CPU 使用率?
我可以使用进程性能计数器,还是我怀疑它们太不可靠了?虽然我不需要循环精度,但我需要相当高的精度来限制分配给每个程序集执行的计算能力。
根据我的情况推断一下。我不寻找进程优先级的原因是我不害怕耗尽我的资源,我只需要确保我可以测量给定程序集使用的“多少”资源 - 因此我关于服务器的观点是任意的忙碌的。
想象一下您有两个程序集 X 和 Y 的示例场景。它们中的每一个都实现了一个给定的算法,我想对哪个程序集可以最快地完成工作进行原始测试。我运行每个程序集并让它运行,直到它使用“Z”资源,此时我评估哪个程序集做得最好。在这种情况下,我不介意一个程序集以 100% CPU 运行 3 秒,而另一个程序集以 2% CPU 运行 5 分钟 - 总资源使用量很重要。
我想我也许可以使用 CPU time perfcounter 来做一个粗略的限制。在一个新线程中运行每个程序集并让它运行,直到它使用给定的 CPU 时间,此时我将终止该进程并评估结果。我只是怕它不够准确。