如果您坚持使用.NET中的标准编码,是否有理由手动调用GC或运行终结器?

Mat*_*att 4 .net garbage-collection

如果您坚持使用.NET中的托管代码和标准编码(没有任何与CLR相关的非常规事物),是否有任何理由手动调用GC或请求在未引用的对象上运行终结器?

我问的原因是我有一个在工作记忆集中增长很大的应用程序.我想知道是否打电话

System.GC.Collect();
Run Code Online (Sandbox Code Playgroud)

System.GC.RunFinalizers();
Run Code Online (Sandbox Code Playgroud)

会有所帮助,如果它会迫使CLR无法正常做任何事情.

zne*_*eak 7

不,它没有用.不要这样做.CLR已经以一种很好的方式处理所有与内存管理相关的内容,并且没有显式调用会执行它尚未执行的操作.

尝试在程序中查找内存泄漏:虽然.NET语言是由内存管理的,但并不意味着它总是知道你什么时候不再使用某个对象.例如,作为事件侦听器附加到其他对象的对象被认为是GC的根,并且不会被收集.

您可以尝试SOS寻求泄漏.

如果确实没有泄漏,那么您的程序确实需要它拥有的内存.