gpt4 book ai didi

.net - IDisposable 对象是否意味着只创建和处理一次?

转载 作者:行者123 更新时间:2023-12-01 15:14:45 24 4
gpt4 key购买 nike

我正在使用一个巨大的二叉树结构,其节点可能会或可能不会使用非托管资源。其中一些资源可能会占用大量内存,但一次只会使用其中的少数资源。树的初始状态可以看作是“休眠”。

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

我目前正在利用 IDisposable 接口(interface)来实现这一点。它非常有用,因为在很多情况下我需要创建将在本地使用的小分支,而“using”关键字非常方便,可确保不会意外打开任何资源。

我可以在没有真正处置但有点进入休眠状态的对象上实现 IDisposable 吗?

提前致谢。

编辑:感谢所有聪明的答案。我喜欢处理资源访问权限而不是资源本身的想法。现在我正在为负责清理的函数寻找更好的名称。 (除了 Release() 或 Sleep() 之外还有其他想法吗?再次感谢。

最佳答案

IDisposable.Dispose 中还不完全清楚文档,其中包括这个(强调我的):

Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.

还有这个:

If an object's Dispose method is called more than once, the object must ignore all calls after the first one. The object must not throw an exception if its Dispose method is called multiple times. Instance methods other than Dispose can throw an ObjectDisposedException when resources are already disposed.

后者表明它确实不应该 用于“重置”操作,我认为这正是您所追求的。 (我不确定您的“休眠”术语在这里是否真的有帮助;我说您真的在处理所有子节点中所有主动获取的资源是否正确?)

当然,这只是约定俗成 - 您可以让您的代码随心所欲。但是,我认为大多数开发人员会觉得有些奇怪。

我知道你想做什么,但我不确定最好的方法...

关于.net - IDisposable 对象是否意味着只创建和处理一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2317822/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com