|
|
1
11
不,您可能不需要使用IDisposble接口。不过,在某些情况下建议(我可能会在稍后的记忆中添加更多内容:):
隐马尔可夫模型。。。我现在想不起来了,但是如果类的行为很复杂,您可能需要重新考虑为什么不希望实现
|
|
|
2
7
经验法则:如果类型的成员变量本身是IDisposable的,或者类型是非托管的,则需要实现IDisposable。GC在.NET中是不确定的,IDisposable为您提供了一种确定的方法,不是回收内存而是回收 资源 . 因此,当Dispose()被调用时,GC不会立即释放内存,但可以清理非托管内存 |
|
|
3
3
|
|
|
4
3
一个很少提及的场景,其中正确使用iDisposable是 批评的 是一个使用寿命短的对象,它接收来自长寿命对象的事件。此类对象的Dispose方法必须取消订阅其事件。如果对象本身没有取消订阅,它将不符合垃圾回收的条件,直到其订阅的事件的对象符合垃圾回收的条件;这很可能永远不会。
例如,某些类型的枚举器需要订阅“object changed”消息。在一个长时间运行的程序的执行过程中创建数千个这样的枚举器是完全合理的。如果这些枚举数没有被取消订阅,它们可能会有效地阻塞系统,即使它们从未使用托管内存以外的任何资源。 请注意,顺便说一下,尽管处理这样一个对象很重要,但是添加终结器来确保这样的处理是无用的。如果事件发布者超出了范围,尝试从其某个事件中取消订阅充其量是无用的,而且可能是危险的。由于事件订阅服务器不能超出作用域,除非它接收到的所有事件的发布服务器也超出了作用域,所以只有在没有其他事情可做时才会调用终结器。 |
|
|
5
2
是的,即使你身边没有任何托管资源,
注意,这本身还不能释放任何资源,因为垃圾收集是不确定的(即,它通常不会在您选择的任何时刻运行),但它会断开对象之间的引用(链接),使某些对象更有可能在下次运行GC时获得垃圾收集。 |
|
|
6
0
不,只有在制作成本很高的情况下,才可以一次性使用。 |
|
|
A B · C#Excel自动调整列避免长文本时出错 1 年前 |
|
|
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 1 年前 |
|
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 1 年前 |
|
|
Sei · Avalonia/WPF将路由器传递到控制模板 1 年前 |