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

标签 .net memory-management clr clr-hosting

我在运行时将几个外部程序集加载到我的应用程序中。而且我需要限制每个外部程序集中定义的特定类可以使用的内存量,例如,每个实例 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/

相关文章:

c# - Scrollviewer 中的 UWP Canvas 像鼠标输入一样处理笔输入

C# TLS 1.1 实现

memory-management - 当我们删除该模块时,内核模块泄漏的内存是否会返回到系统?

python - 大型 numpy 矩阵内存问题

.net - 如何在纯 .net 中使 .NET 公共(public)语言运行时 (CLR) 崩溃

c# - 如何先使用 DotConnect For PostgreSQL 和 Entity Framework 代码

c# - Action <T> 用作参数

objective-c - 为声明的属性合成了哪些等效代码?

stored-procedures - 将大量 XML 传输到 CLR 存储过程

windows - 0xc000007b 错误 - 但所有 DLL 都是 32 位的