我在运行时将几个外部程序集加载到我的应用程序中。而且我需要限制每个外部程序集中定义的特定类可以使用的内存量,例如,每个实例 10 mb,否则我们会得到 OutOfMemory。
我用谷歌搜索了执行此操作的最佳方法,并找到了一些关于 CLR Runtime Hosting 的信息.这似乎是我需要的东西,但我找不到任何好的例子。
任何人都可以分享代码示例或一些关于使用 CLR 运行时托管的内存管理的链接吗? 或者也许有一些更好的解决方案来限制每个类的内存量?
提前致谢。
最佳答案
这不是您可以通过 CLR 托管完成的事情。如果托管 CLR,则可以满足从 GC 到 Windows 的分配要求,例如所以它使用其他一些分配器而不是 VirtualAlloc。但是,每次分配对象时都不会调用主机(这太昂贵了)。
理论上,您可以使用 CLR Profiling API 来完成此操作。它允许您在分配对象时接收回调。
不过,恐怕您试图从错误的角度来看待这个问题。您是否可以尝试将这些外部程序集隔离到单独的进程中,甚至可能使用 Win32 作业对象 API 来限制它们,而不是限制类实例使用的内存量(这是非常精细的)?
关于.net - 如何限制特定类可以分配的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4842837/