我正在尝试减少我的应用程序使用的内存量。在我的应用程序中,我使用System.Reflection.Emit.EnumBuilder根据运行时接收到的信息动态创建枚举项。我只使用EnumBuilder来创建单个枚举项,之后我就不再需要它了。当我使用CLRProfiler时,我注意到EnumBuilders从未被销毁。我的应用程序在运行时可以创建数千个枚举项,因此这些EnumBuilders使用的内存量可能会增加。EnumBuilder没有定义Dispose方法,因此我无法以这种方式销毁它。是否可能以某种方式从内存中删除遗留的EnumBuilders?
创建枚举之后销毁EnumBuilder?
原标题:
最佳回答
我也注意到了这个问题。如果我没记错,这是ModuleBuilder中的一个泄漏问题,会占用字节和字符串的内存。
您可以在装载了 SOS 的 WinDbg 中查看,以获取更好的内存信息。
问题回答
EnumBuilder
创建动态程序集中的枚举。根据C#编程指南中的如何:加载和卸载程序集,没有办法在不卸载使用它的所有应用程序域的情况下卸载程序集。特别地:
即使程序集超出范围,实际的程序集文件仍然会保持加载状态,直到包含它的所有应用程序域都被卸载。
我的应用程序可以在运行时进行数千次枚举。
为什么?听起来你正在做一些可能不该做的事情。
相关问题
热门标签
- winforms
- combobox
- fogbugz
- java
- date
- internationalization
- asp.net
- iis
- url-rewriting
- urlrewriter
- c#
- enums
- ocaml
- haxe
- algorithm
- string
- viewstate
- .net
- c++
- c
- symbol-table
- mysql
- database
- postgresql
- licensing
- migration
- vb.net
- vb6
- declaration
- vb6-migration
- python
- psycopg2
- backup
- vmware
- virtualization
- gnu-screen
- authentication
- desktop
- excel
- xll
- cultureinfo
- regioninfo
- oracle
- client
- session
- download
- html
- virtual
- constructor
- scenarios
- perl
- full-text-search
- javascript
- ajax
- testing
- oop
- inheritance
- vim
- encapsulation
- information-hiding