我在运行时将几个外部程序集加载到我的应用程序中。而且我需要限制每个外部程序集中定义的特定类可以使用的内存量,例如,每个实例 10 mb,否则我们会得到 OutOfMemory。
我已经用谷歌搜索了执行此操作的最佳方法,并找到了一些有关CLR Runtime Hosting的信息。这似乎是我需要的东西,但我找不到任何好的例子。
任何人都可以分享代码示例或一些关于使用 CLR 运行时托管的内存管理的链接吗?或者也许有一些更好的解决方案来限制每个类的内存量?
提前致谢。
我在运行时将几个外部程序集加载到我的应用程序中。而且我需要限制每个外部程序集中定义的特定类可以使用的内存量,例如,每个实例 10 mb,否则我们会得到 OutOfMemory。
我已经用谷歌搜索了执行此操作的最佳方法,并找到了一些有关CLR Runtime Hosting的信息。这似乎是我需要的东西,但我找不到任何好的例子。
任何人都可以分享代码示例或一些关于使用 CLR 运行时托管的内存管理的链接吗?或者也许有一些更好的解决方案来限制每个类的内存量?
提前致谢。
这不是您可以通过 CLR Hosting 完成的事情。如果您托管 CLR,您可以满足从 GC 到 Windows 的分配要求,例如,使用其他分配器代替 VirtualAlloc。但是,每次分配对象时都不会调用主机(这太昂贵了)。
理论上,您可以通过使用 CLR Profiling API 来完成此操作。它确实允许您在分配对象时接收回调。
不过,我担心你试图从错误的角度看待这个问题。您是否可以尝试将这些外部程序集隔离到单独的进程中,甚至可能使用 Win32 作业对象 API 限制它们,而不是限制类实例使用的内存量,这非常精细?
如果您的目标是限制单个进程的内存消耗,我认为您应该使用 Process 类的“MaxWorkingSet”属性。有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/system.diagnostics.process.maxworkingset.aspx