如何在 C# 中限制线程 RAM 使用

A X*_*A X 2 c# ram multithreading garbage-collection

我想限制 C# 中的线程可以分配多少 RAM,这样超出此限制的分配将失败/崩溃或线程将终止。

例如,假设我在 C# 中有 3 个托管线程,即线程 A、B 和 C。我想限制所有三个线程使用不超过 100 MB 的 RAM。如果他们这样做,那么我希望他们崩溃而不影响其他线程。

现在在我看来,由于 C# 是一种基于虚拟机的语言,并且使用垃圾收集器,因此理论上这实际上应该是可能的,而无需尝试使用限制进程 RAM 使用的操作系统功能。

怎样才能实现这样的目标呢?任何指导将不胜感激。

The*_*ias 5

您无法限制一个线程或一组线程使用的 RAM,因为线程拥有的唯一 RAM 是其堆栈(大约1MB内存)。堆中分配的内存由程序的所有线程共享。它不属于任何线程或线程组。C# 语言或 .NET 运行时中没有任何规定可以阻止特定线程与堆中分配的对象进行交互。如果要限制可用于某个操作的 RAM 量,则必须将该操作隔离在单独的进程中,而不是单独的线程中。