我主要遵循IDisposable模式,并且对于大多数类而言都是合理的。但是ReaderWriterLockSlim让我质疑应用这种模式的可行性。 ReaderWriterLockSlim.Dispose所做的所有事情都是关闭某些事件句柄。那么用很少的资源来Dispose这样的类有多重要呢?在这种情况下,我真的不介意GC是否必须等待另一轮非托管资源的终结者完成。

但是,应用IDisposable模式的结果相当可观,现在每个使用一次性类的类也都必须实现IDisposable。在我的特定情况下,我正在实现HashSet的包装器。我并不特别期望配置此类对象的要求,因为偶然地,它使用了一个同步器。

在这种情况下,是否有任何不违反一次性模式的理由?虽然我很想这样做,但实际上我不会这样做,因为违反一致性的情况要严重得多。

最佳答案

非托管OS句柄的问题在于handles come from a limited supply. GC无法识别此问题。

句柄的纯内存消耗不是很大。内核内存中的对象不过是某个地方的哈希表条目而已。

您说对了:“您必须始终处置所有一次性物品”是不够的。那条规则太简单了。 For example the Task class does not need to be disposed.如果您知道自己在做什么,则可以放宽对待处置的立场。请注意,并非所有团队成员都可能理解这一点(现在您可以在源代码中留下此答案的链接...)。

如果您确定不会泄漏很多 handle ,则可以放心地执行此操作。请注意,在边缘情况(负载,错误等)下,泄漏可能会比预期的更多,从而导致生产问题。

10-05 21:35