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 没有实现这个接口 。 你怀疑一个字符串是否导致你的应用程序内存泄漏? 你在忙什么? 你可以发布一些代码,以便我们能够检查它吗?