English 中文(简体)
创建枚举之后销毁EnumBuilder?
原标题:
  • 时间:2009-03-20 19:24:41
  •  标签:

我正在尝试减少我的应用程序使用的内存量。在我的应用程序中,我使用System.Reflection.Emit.EnumBuilder根据运行时接收到的信息动态创建枚举项。我只使用EnumBuilder来创建单个枚举项,之后我就不再需要它了。当我使用CLRProfiler时,我注意到EnumBuilders从未被销毁。我的应用程序在运行时可以创建数千个枚举项,因此这些EnumBuilders使用的内存量可能会增加。EnumBuilder没有定义Dispose方法,因此我无法以这种方式销毁它。是否可能以某种方式从内存中删除遗留的EnumBuilders?

最佳回答

我也注意到了这个问题。如果我没记错,这是ModuleBuilder中的一个泄漏问题,会占用字节和字符串的内存。

您可以在装载了 SOS 的 WinDbg 中查看,以获取更好的内存信息。

问题回答

EnumBuilder 创建动态程序集中的枚举。根据C#编程指南中的如何:加载和卸载程序集,没有办法在不卸载使用它的所有应用程序域的情况下卸载程序集。特别地:

即使程序集超出范围,实际的程序集文件仍然会保持加载状态,直到包含它的所有应用程序域都被卸载。

我的应用程序可以在运行时进行数千次枚举。

为什么?听起来你正在做一些可能不该做的事情。





相关问题
热门标签