using语句 – 是否会触发垃圾回收?
我想要做的是将一些可疑函数包装在using语句中以触发垃圾收集,是否有人使用过或看过这样的东西? 这有用吗? 你对此有什么看法?
using (String wrapper = new String("maybe this will trigger gc")){ //do stuff here //or maybe: // function1(); // function2(); // //and then see if its leaking? // eg: _mygeometry = new Geometry(); _mygeometry = null; // will GC free this ? }
你觉得这会有用吗? 你之前用过这个吗? 有什么我可以做的不是一个字符串? 我使用WPF,我尝试使用(var garbage = 1){}并且不起作用,我想String可能会。
using语句仅适用于那些实现IDisposable的类。 它只是确保你在using()
定义的对象在块执行后甚至在发生某些exception时调用它的Dispose
方法。 它与使用try
with finally
块类似。
如果您怀疑应用程序中存在内存泄漏,那么如果您使用一些可用的内存分析器来检测问题则会更好。
您当前的代码不应该编译为String
类不实现IDisposable
编辑:
自编辑后的问题
_mygeometry = null; // will GC free this ?
你应该看到这个SO链接: C#:应该将对象变量赋值为null吗? 并从VinayC回答
只有实现IDisposable
类才能在using(...){...}
语句中使用。
using语句允许程序员指定何时使用资源的对象应该释放它们。 提供给using语句的对象必须实现IDisposable接口。 此接口提供Dispose方法,该方法应释放对象的资源。
资料来源: MSDN
不幸的是, string
没有实现这个接口 。 你怀疑一个字符串是否导致你的应用程序内存泄漏? 你在忙什么? 你可以发布一些代码,以便我们能够检查它吗?