c# - 我什么时候不应该实现 IDisposable?

标签 c# .net memory-management memory-leaks idisposable

首先,如果这被认为是重复的,抱歉 - 我知道这是一个常见的话题,但我已经看过但没有找到满意的答案。

有很多问题询问什么时候使用IDisposable,但从我读过的所有内容来看,我就是不明白你为什么不实现它在你上的每一节课中。有什么可失去的?它对性能有很大影响吗?

我对 IDisposable 的部分理解是,它所做的其中一件事是: Dispose()ing other IDisposables owned by the object .请原谅我的无知,但这仅适用于给定对象的字段/属性,还是也适用于在其方法中创建的对象?

例如,如果一个 Font 是在一个实现了 IDisposable 的类的方法中创建的,但是那个 Font 没有被初始化一个 using block ,或 .Dispose() 在方法的末尾明确地;当它的 IDisposable 父类/类被 GCd/disposed 时,它会被处理吗?或者,Font 永远不会被处理掉吗?

我不是要离题,但如果它确实会像这样充当“包罗万象”(有效地处理任何错误的子 IDisposable 对象,否则这些对象将被未处理),这个理由是否足以证明总是尽可能实现IDisposable

最佳答案

规则非常简单,如果您的类中有任何字段属于一次性类型,则需要实现 IDisposable。以便您可以处理它们。

方法内部发生的事情与类的字段几乎没有关系。如果您创建字体并将其存储在一个字段中 那么是的,上面的规则表明您需要一个 Dispose() 方法。如果您不这样做,而只是使用字体来绘制一些东西,就像您通常那样,那么请始终使用 using 语句,这样您就可以在使用完字体后立即处理它。

关于c# - 我什么时候不应该实现 IDisposable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18647848/

相关文章:

c# - 单值数据的 session 正在从数据库获取,而双值数据的 session 未到来

c# - 派生类型中的 `Activator.CreateInstance` 和 `new` 属性

c# - 这个 LINQ 示例的复杂性是什么?

.net - 为什么此 DataAdapter 不将行插入数据库?

c# - Aforge 内存使用

python - 在 Windows 中增加 python 的可用内存

c - 未能释放字符指针内存 c

c# - 在 C# 中多次读取 SQLDataReader?

c# - Xamarin (XAML) 如何并排放置 2 个标签

c# - 如何通知异常并继续