2011-01-30 27 views
3

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

我用google搜索了什么是最好的方法来做到这一点,并找到了一些关于CLR Runtime Hosting的信息。这似乎是我需要的东西,但我找不到任何好的例子。

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

在此先感谢。

+0

这是一个有趣的话题。但是,请您详细说明一下*为什么按每个班级计算*?也许还有其他一些明显的解决方案,如果你从类实例中释放你的想法。 – 2011-01-30 13:37:48

+0

事实上,按每个班级来限制并不那么重要。一类精确类型是我要实例化的唯一东西,这就是为什么我的思想与类实例'锁定':)。我可以做到这一点,例如,在AppDomain中(在AppDomain中创建每个实例),但我找不到限制每个AppDomain存储器的方法:(我的目标是限制某种可用于“外部开发者' – Andrey 2011-01-30 13:48:00

回答

4

这不是您可以通过CLR Hosting完成的任务。如果您托管CLR,则可以满足从GC到Windows的分配要求,例如,所以它不是使用VirtualAlloc,而是使用其他一些分配器。但是,每次分配对象时都不会调用主机(这会太昂贵)。

理论上,您可以通过使用CLR分析API来完成此操作。它确实允许您在分配对象时接收回调。

但是,我害怕,你试图从错误的角度来看待这个问题。您可以尝试将这些外部程序集分离为单独的进程,而不是限制类的实例所使用的内存量,而不是限制它们使用Win32作业对象API?

+0

从理论上讲,可能有数百个这样的程序集,它们存在着某种交互作用,这就是为什么我害怕将它们分离成一个独立的进程,但是当然,如​​果没有更多的选项来限制内存除了每个进程,我没有选择:)谢谢你的回应 – Andrey 2011-01-30 12:48:48