如何限制特定类可以分配的内存?

时间:2011-01-30 12:18:20

标签: .net memory-management clr clr-hosting

我在运行时将几个外部程序集加载到我的应用程序中。我需要限制每个外部程序集中定义的特定类可以使用的内存量,例如,每个实例10 MB,否则我们得到OutOfMemory。

我已经用Google搜索了最佳方法,并找到了有关CLR Runtime Hosting的一些信息。这似乎是我需要的东西,但我找不到任何好的例子。

任何人都可以使用CLR运行时托管共享代码示例或某些有关内存管理的链接吗? 或者也许有一些更好的解决方案来限制每个类的内存量?

提前致谢。

2 个答案:

答案 0 :(得分:4)

这不是通过CLR托管可以做到的事情。如果您托管CLR,则可以满足从GC到Windows的分配要求,例如:因此,它使用一些其他分配器而不是VirtualAlloc。但是,每次分配对象时都不会调用主机(这太贵了)。

理论上,您可以使用CLR Profiling API来实现此目的。它允许您在分配对象时接收回调。

但是,我担心你会试图从错误的角度看待这个问题。您是否可以尝试将这些外部程序集隔离到单独的进程中,甚至可能使用Win32作业对象API限制它们,而不是限制类实例使用的内存量(非常精细)?

答案 1 :(得分:0)

如果您的目标是限制单个进程内存消耗,我认为您应该使用Process类的“MaxWorkingSet”属性。有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/system.diagnostics.process.maxworkingset.aspx