.net 中线程的 RAM 和 CPU 限制

Posted

技术标签:

【中文标题】.net 中线程的 RAM 和 CPU 限制【英文标题】:RAM and CPU limitation of thread in .net 【发布时间】:2012-07-21 09:33:03 【问题描述】:

我需要为某个线程设置 CPU/RAM 使用的最大限制。如何通过 .net(不使用虚拟化)来做到这一点?

【问题讨论】:

“RAM”是指栈还是堆?您对堆栈大小有一些的灵活性,但是堆和 CPU 呢?没有那么多AFAIK。 【参考方案1】:

AFAIK 你不能按线程来做。您只能按进程执行此操作。你唯一能做的就是描述here

【讨论】:

真的,这可能吗?请举例或参考。 @leppie 可以设置进程的处理器亲和性,可以有效限制其CPU使用率。不确定记忆...不要认为这是可能的。 为了限制内存,你可以使用msdn.microsoft.com/en-us/library/windows/desktop/…【参考方案2】:

Windows 不提供限制线程的 CPU 或内存使用的机制。

但是,您可以通过调整线程的优先级来达到类似的效果。优先级较高的线程在计算机资源中的份额相对较大,而优先级较低的线程会在必要时为优先级较高的线程腾出空间。

在 .NET 的世界中,这可以通过Thread.Priority property 方便地公开,它接受ThreadPriority values 之一。

请注意,线程进程都有优先级,线程的基本优先级将由您为 Thread.Priority 属性设置的值及其进程的优先级确定。

相关问题:How can I programmatically limit my program's CPU usage to below 70%?

【讨论】:

【参考方案3】:

为确保您有足够的内存, 并且因为“单线程”已经在处理有限数量的 ram,

真正将 apartmentstate 与 MTA 结合使用。

线程很少,但由主线程管理, 它在没有“内存限制”的情况下实现流程和任务。您的流程不会因 MTA 的公寓而崩溃。

https://docs.microsoft.com/en-us/dotnet/api/system.threading.apartmentstate?view=net-6.0(MTA 公寓州的一个 .Net 版本)

要快速赚钱,或者灵活的容器肯定有:

并行任务(Thread.subtree.subtree....parallel...) 线程池 MTA(针对 STA) 线程的优先级 灯光代码 通过代码管理内存(vb:无,数组擦除,gc 调用)

每一个都可以通过速度、同步、全局内存量或内存管理来推动您的软件更快,或者不会出现内存过载。

【讨论】:

以上是关于.net 中线程的 RAM 和 CPU 限制的主要内容,如果未能解决你的问题,请参考以下文章

如何通过多线程 Java 编程最大限度地利用资源(RAM 和 CPU)?

进程和线程

多线程之缓存一致性协议

进程与线程的区别(整理)

ISPC - 我可以将 CPU 线程数限制为 1 吗?

进程与线程