【发布时间】:2014-12-30 16:42:46
【问题描述】:
我主要遵循IDisposable 模式,对于大多数课程来说这是合理的。但是ReaderWriterLockSlim 让我质疑应用这种模式的可行性。 ReaderWriterLockSlim.Dispose 所做的只是关闭一些事件句柄。那么资源这么少的Dispose这样的课程有多重要呢?在这种情况下,我真的不介意 GC 是否必须再次等待非托管资源的终结器完成。
应用IDisposable 模式的后果是相当可观的,然而,每个使用一次性类的类现在也必须实现IDisposable。在我的特殊情况下,我正在为HashSet 实现一个包装器。我并不特别期望处理此类对象的要求,因为意外地,它使用了一个同步器。
在这种情况下有什么理由不违反一次性模式吗?虽然我渴望这样做,但在实践中我不会这样做,因为违反一致性会更糟糕。
【问题讨论】:
-
您的问题是您使用的非静态锁与您的对象具有相同的生命周期?
-
@NathanCooper - 大致上,是的。为每个读/写操作实例化一个锁也不是很有效。我可以使用
Monitor,但我担心锁定车队。 -
所以你正在读或写东西,它不是静态的?所以它是每个实例的一些资源。
-
是的,目前该类由
HashSet(T)和ReaderWriterLockSlim组成,后者同步任何操作。 -
很少需要处理这样的对象,它往往会在程序的生命周期内存活。不要浪费任何时间在程序终止前一毫秒处理它。
标签: c# .net garbage-collection dispose idisposable