创建枚举后销毁 EnumBuilder?

发布于 2024-07-14 23:24:41 字数 306 浏览 5 评论 0原文

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

I am trying to reduce the amount of memory my application uses. In my application, I use System.Reflection.Emit.EnumBuilder to create enumerations on the fly from information I receive at runtime. I only use the EnumBuilder to create an individual enumeration, and after that I have no further use for it. While using CLRProfiler, I noticed that the EnumBuilders are never destroyed. My application can make thousands of enumerations while running, so the amount of memory used by these EnumBuilders can add up. EnumBuilder does not define a Dispose method, so I cannot destroy it that way. Is it possible to somehow remove leftover EnumBuilders from memory?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

谜兔 2024-07-21 23:24:41

EnumBuilder 在动态程序集中创建枚举。 根据如何:加载和卸载程序集 (C# 编程指南),如果不卸载使用该程序集的所有应用程序域,就无法卸载该程序集。 特别是:

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

EnumBuilder creates the enumeration in a dynamic assembly. According to How to: Load and Unload Assemblies (C# Programming Guide), there's no way to unload an assembly without unloading all app domains that use it. In particular:

"Even if the assembly goes out of scope, the actual assembly file will remain loaded until all application domains that contain it are unloaded."

他夏了夏天 2024-07-21 23:24:41

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

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

My application can make thousands of enumerations while running,

Why? It sounds like you are doing something that you probably shouldn't be doing.

别在捏我脸啦 2024-07-21 23:24:41

我也注意到了同样的情况。 这是 ModuleBuilder 中的一个“泄漏”,它保留在字节和字符串 IIRC 上。

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

I have noticed the same. It's a 'leak' in ModuleBuilder that hangs on to the bytes and strings IIRC.

You can have a look in WinDbg with SOS loaded for better memory info.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文