|
|
1
4
一个奇怪的你
可以看到,即使实例方法仍在运行,终结器仍可以运行,只要该实例方法以后不使用任何变量。所以在您的示例代码中
如果您插入对的呼叫
克里斯·布鲁姆 blog post |
|
|
2
3
我总是使用这个设计模式来实现IDisposable接口。(这是微软建议的)而且对我来说GC.SuppressFinalize总是具有保证的性质!
|
|
|
3
1
我在终结器中抛出了一个invalidooperationexception,这样可以很容易地找到未正确处理的类型。在调用GC.SuppressFinalize的地方调用Dispose()时,我从未得到异常。 |
|
|
4
0
请记住,调用GC.ReRegisterForFinalize将导致对象重新注册以进行finalize。
例如在构造器中使用
并在决赛期间在调试消息中报告。 另外,我注意到GC.supersfinalize不在finally子句中,如果在dispose期间抛出异常,则不会抑制对象finalizer。 |
|
|
5
0
当构造具有用户定义终结器的对象时,运行时必须保留对该对象的内部引用,以便当在用户代码中无法访问该对象时,仍可以在运行时的终结线程中调用终结器。考虑到时间是调用终结器的关键,如果用户已请求禁止对象,则将其保留在队列中是没有意义的。在测试CLI实现中,我在具有用户定义的终结器的对象的头中保留了SuppressFinalizer标志。如果终结器线程到达队列中的对象时标志为true,则将跳过终结器调用。我不会从队列中移除对象,这样我就可以继续调用
|
|
|
A B · C#Excel自动调整列避免长文本时出错 1 年前 |
|
|
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 1 年前 |
|
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 1 年前 |
|
|
Sei · Avalonia/WPF将路由器传递到控制模板 1 年前 |