我想要做的是将一些可疑函数包装在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。
答案 0 :(得分:7)
using语句仅适用于那些实现IDisposable的类。它只是确保您在using()
内定义的对象在执行块之后调用其Dispose
方法,或者甚至在发生某些异常时调用它。这类似于将try
与finally
块一起使用。
如果您怀疑应用程序中存在内存泄漏,那么如果您使用一些可用的内存分析器来检测问题则会更好。
您当前的代码不应该编译为String
类没有实现IDisposable
编辑:
自编辑后的问题
_mygeometry = null; // will GC free this ?
你应该看到这个SO链接: C#: should object variables be assigned to null? 并从VinayC回答
答案 1 :(得分:1)
只能在IDisposable
语句中使用实现using(...){...}
的类。
using语句允许程序员指定对象的时间 使用资源应该释放它们。提供给使用的对象 语句必须实现IDisposable接口。这个界面 提供Dispose方法,该方法应该释放对象 资源。
来源:MSDN
不幸的是,string
does not implement this interface。你怀疑一个字符串是否导致你的应用程序内存泄漏?你在忙什么?你可以发布一些代码,以便我们能够检查它吗?