IDisisposable对象是否只需创建和处理一次?

Tra*_*rap 2 .net idisposable

我正在使用一个巨大的二叉树结构,其节点可能会也可能不会使用非托管资源.其中一些资源可能占用大量内存,但一次只能使用其中一些内存.树的初始状态可以被视为"休眠".

每当访问节点时,该特定节点及其子节点将"唤醒"并懒洋洋地获取其分配的资源.同样,访问树中的不同分支将使当前活动的分支进入休眠状态,从而释放其资源.这意味着任何给定节点都可以在任何给定时间被唤醒并一次又一次地进入休眠状态.

我目前正在利用IDisposable接口来实现这一目标.它非常有用,因为在很多情况下我需要创建将在本地使用的小分支,并且'using'关键字非常方便,确保不会意外地打开资源.

我是否可以在没有真正处理但有点睡觉的对象上实现IDisposable?

提前致谢.

编辑:感谢所有聪明的答案.我喜欢处理资源访问而不是资源本身的想法.现在我正在为负责清理的功能寻找更好的名称.(除了Release()或Sleep()之外的任何想法?再次感谢.

Jon*_*eet 5

IDisposable.Dispose文档中可以看出这一点,包括这个(强调我的):

执行与释放,释放或重置非托管资源相关的应用程序定义的任务.

而且这个:

如果多次调用对象的Dispose方法,则该对象必须忽略第一个之后的所有调用.如果多次调用Dispose方法,则该对象不得抛出异常.除了Dispose之外的实例方法可以在已经处置资源时抛出ObjectDisposedException.

后者表明它确实应该用于"重置"操作,这是我认为你所追求的.(我不确定你的"入睡"术语在这里真有帮助;我是否正确地说你真正处理所有子节点中所有积极获取的资源?)

当然,这只是按照惯例 - 你可以让你的代码做你喜欢的任何事情.但是,我认为大多数开发人员会觉得有些奇怪.

我可以看到你想要做什么,但我不确定这样做的最佳方式......