0

我想做的是包装一些可能在 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,我尝试使用 (vargarbage = 1){} 并且不起作用,我想 String 可能会。

4

2 回答 2

7

using语句仅适用于那些实现IDisposable的类。它只是确保您在其中定义的对象将在块执行后或什至在发生某些异常时using()调用其方法。Dispose它与使用trywithfinally块类似。

如果您怀疑应用程序中存在内存泄漏,那么最好使用一些可用的内存分析器来检测问题。

您当前的代码不应编译为String类未实现IDisposable

编辑:

由于编辑的问题

_mygeometry = null; // will GC free this ?

你应该看到这个 SO Link: C#: should object variables are assigned to null? 并从VinayC回答

于 2012-08-13T03:31:31.870 回答
1

只有实现的类IDisposable才能在using(...){...}语句中使用。

using 语句允许程序员指定使用资源的对象何时应该释放它们。提供给 using 语句的对象必须实现 IDisposable 接口。该接口提供了 Dispose 方法,该方法应该释放对象的资源。

资料来源:MSDN

可惜string 没有实现这个接口。您是否怀疑某个字符串会导致您的应用程序出现内存泄漏?你在处理什么?你能发布一些代码,以便我们能够检查它吗?

于 2012-08-13T03:26:56.470 回答