ReaderWriterLockSlim是如何"一次性"的?

top*_*l32 5 .net c# garbage-collection dispose idisposable

我主要遵循这种IDisposable模式,对于大多数合理的课程.但ReaderWriterLockSlim让我质疑应用这种模式的可行性.一切ReaderWriterLockSlim.Dispose都是关闭一些事件句柄.那么Dispose资源这么少的班级有多重要呢?在这种情况下,我真的不介意GC是否必须等待另一轮非完整资源的终结者才能完成.

IDisposable然而,应用模式的结果是相当大的,每个使用一次性类的类现在也必须实现IDisposable.在我的特定情况下,我正在实现一个包装器HashSet.我并不特别期望处理这种物体的要求,因为它意外地使用了同步器.

在这种情况下,有没有理由不违反一次性模式?虽然我很渴望,但我不会在实践中这样做,因为违反一致性要差得多.

usr*_*usr 4

非托管操作系统句柄的问题在于句柄的供应有限。GC 并不知道这一点。

句柄的纯内存消耗并没有那么大。只不过是内核内存中的一个对象,可能还有某个地方的哈希表条目。

你是对的,仅仅说“你必须始终处理所有一次性物品”是不够的。这个规则太简单了。例如,该类Task不需要被释放。如果您知道自己在做什么,您就可以在处置方面采取宽松的立场。请注意,并非所有团队成员都可能理解这一点(现在您可以在源代码中留下指向此答案的链接......)。

如果您确定不会泄漏大量句柄,则可以安全地执行此操作。请注意,在边缘条件(负载、错误等)下,您可能会泄漏比预期更多的内容,从而导致生产问题。