如果您坚持使用 .NET 中的托管代码和标准编码(不使用 CLR 执行任何非常规操作),是否有任何理由手动调用 GC 或请求在未引用的对象上运行终结器?
我问的原因是我有一个应用程序在工作记忆集中变得巨大。我想知道是否打电话
System.GC.Collect();
and
System.GC.RunFinalizers();
会有帮助,并且如果它会强制执行 CLR 通常不会执行的任何操作。
不,这不会有帮助。不要这样做。 CLR 已经以良好的方式处理所有与内存管理相关的事情,并且没有显式调用会执行它尚未执行的操作。
尝试查找程序中的内存泄漏:虽然 .NET 语言是内存管理的,但这并不意味着它总是知道您何时不再使用某个对象。例如,作为事件侦听器附加到其他对象的对象将被 GC 视为根对象,并且不会被收集。
你可以试试SOS http://msdn.microsoft.com/en-us/library/bb190764.aspx来寻找漏洞。
如果确实没有泄漏,那么您的程序确实需要它所拥有的内存。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)