.net - 限制程序集执行的 cpu 周期数

标签 .net multithreading process measurement cpu-cycles

我有一个项目动态加载未知程序集实现指定的接口(interface)。除了实现我的界面外,我不知道程序集的内容或用途。

我需要以某种方式限制这些程序集可用的处理能力。处理器优先级不是我要找的。我不能使用秒表并为程序集分配一定的时间来运行,因为服务器可能很忙。

最理想的情况是,我想指定一些完全与负载无关的 CPU 使用量度。如有必要,我可以在它们自己的进程中运行程序集。

有没有办法以某种方式测量给定线程(或进程,尽管线程是最佳的)的总超时 CPU 使用率?

我是否可以使用进程性能计数器,或者我怀疑它们是否太不可靠?虽然我不需要周期精度,但我需要相当高的精度来限制分配给每个程序集执行的计算能力。


稍微推断一下我的情况。我不寻找流程优先级的原因是我不怕耗尽我的资源,我只需要确保我可以衡量给定程序集使用的“多少”资源 - 因此我对服务器的看法是任意的忙。

想象一下您有两个程序集 X 和 Y 的示例场景。每个程序集都实现了一个给定的算法,我想做一个原始测试,看看哪个程序集能最快完成工作。我运行每个程序集并让它运行直到它使用“Z”资源,此时我评估哪个程序集做得最好。在这种情况下,我不介意一个程序集是否以 100% CPU 运行 3 秒,而另一个以 2% CPU 运行超过 5 分钟 - 重要的是总资源使用量。

我在想我也许可以使用 CPU 时间性能计数器来做一个粗略的限制。在新线程中运行每个程序集并让它运行,直到它使用了给定的 CPU 时间,此时我将终止进程并评估结果。我只是担心它不够准确。

最佳答案

我想我记得 Terrarium 做了一些与您想要的类似的事情我建议看一下 http://www.codeplex.com/terrarium2 .

不幸的是,我认为您没有简单的方法来通过配置加载 DLL 的 AppDomain 来做到这一点。您可能必须重新实现 Terrarium 的功能。

关于.net - 限制程序集执行的 cpu 周期数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/234411/

相关文章:

java - 编写一个java程序来删除同一个java程序中的注释?

.net - .NET 中的 Levenshtein DFA

C#:我应该如何处理大数的算术?

asp.net-mvc - ASP.NET MVC和长时间运行的操作

multithreading - C++11共享指针线程安全被破坏?

c++ - 重定向的标准输入管道被创建的子进程忽略

c - 为什么父进程只读取子进程的第一条和第六条消息?

c# - 如何使用 Linq to SQL 根据另一个表的前 1 个 ID 进行连接?

c# - 如何使用C#为Outlook配置缓存Exchange模式?

java - 如何向 Java 线程传递参数?