我对CLR和GC的工作方式很着迷(我正在通过C#,Jon Skeet的书籍/帖子等阅读CLR来扩展我的知识).
无论如何,说:有什么区别:
MyClass myclass = new MyClass();
myclass = null;
Run Code Online (Sandbox Code Playgroud)
或者,通过使MyClass实现IDisposable和析构函数并调用Dispose()?
另外,如果我有一个带有using语句的代码块(例如下面的代码),如果我单步执行代码并退出using块,那么对象是在处理垃圾收集时发生的吗?如果我在使用块中调用Dispose()会发生什么?
using (MyDisposableObj mydispobj = new MyDisposableObj())
{
}
Run Code Online (Sandbox Code Playgroud)
流类(例如BinaryWriter)有一个Finalize方法吗?我为什么要用它?
我想做的是将一些可能泄漏的可疑函数包装在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 ?
}
Run Code Online (Sandbox Code Playgroud)
你认为这会奏效吗?你之前用过这个吗?有什么我可以做的不是一个字符串?我使用WPF,我尝试使用(var garbage = 1){}并且不起作用,我想String可能会.