- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用一个巨大的二叉树结构,其节点可能会或可能不会使用非托管资源。其中一些资源可能会占用大量内存,但一次只会使用其中的少数资源。树的初始状态可以看作是“休眠”。
每当访问一个节点时,该特定节点及其子节点将“唤醒”并懒惰地获取分配给它们的资源。同样,访问树中的不同分支将使当前事件的分支进入休眠状态,从而释放其资源。这意味着任何给定节点都可以在任何给定时间一次又一次地被唤醒和休眠。
我目前正在利用 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/
据我所知,这是一个公认的规则,如果你有一个具有 IDisposable 成员 m 的类 A,A 应该实现 IDisposable 并且它应该在其中调用 m.Dispose()。 我找不到令人满意的理由
我有一个父类和子类都需要实现IDisposable。 virtual(和 base.Dispose()?)调用应该在哪里发挥作用?当我只是重写 Dispose(bool disposing) 调用时,
我意识到这个问题正在寻找的查询不足以找到 IDisposable 实现的每一个小问题,但每个早期警告都很重要,所以我会尽我所能。 我想知道是否有人提出了 NDepend 的 CQL 查询,该查询将列出
我对 C# 还是比较陌生,只是在过去几天才接触到“IDisposables”。我可以掌握 using block 的概念来处理必须处理的对象,而无需手动记住调用 .Dispose() 方法 - 方便!
在我的应用程序中,我有一个每隔几秒创建一次的大对象。我用它做了一些工作,然后就不再需要它了。 我在任务管理器中看到,即使我没有对该对象的任何引用并且需要收集它,ram 大小也会增加。 在实现 IDis
考虑一下: interface IFoo : IDisposable { } class Program { static void Main() { var foo = GetFoo
我是这么认为的。但是请看一下 ASP.NET 中的内置类: public sealed class HttpPostedFile { public Stream InputStream { g
昨天,在我们的代码库上运行 Visual Studio 代码分析后,以下代码被突出显示为一个问题: using (var stringReader = new StringReader(someStr
我认为这个问题说明了一切。 谢谢。 最佳答案 如果对象拥有该资源,他们应该实现IDisposable。通常不需要将事物设置为 null,尽管它没有坏处。 如果您不拥有该资源,那么显然您不应该处置它,并
MSDN 文档和 StackOverflow 上的许多答案竭尽全力讨论如何正确实现 IDisposable,例如MSDN IDisposable , MSDN Implementing IDispos
如果一个类继承自一个本身实现了 IDisposable 的接口(interface),该类是否也应该实现 IDisposable? 例如 internal IMyInterface : IDispos
当 出现时,正确处理接口(interface)的默认实现的最佳方法是什么?接口(interface)不继承自 IDisposable ?例如,假设我想做 public class FooGetter
我有一个实现 IDisposable 的类,因为它有一个 IDisposable 的私有(private)成员字段“foo”(在构造函数中初始化)。我意外地收到了 CA2000 代码分析错误,它希望我
如果我有一个相当标准的抽象类,它允许注入(inject)一个 IDisposable 实例。但是,一些继承自此类的类不应处置注入(inject)的存储库,而其他类则应处置。显而易见的解决方案是有一个构
这个问题在这里已经有了答案: Declare IDisposable for the class or interface? (7 个答案) 关闭 4 年前。 我想问的是,如果类 A 继承自 Int
我有一个“永远”存在于应用程序中的 IDiposable 对象。在我的例子中是 SemaphoreSlim,但这个问题实际上适用于任何可以处置的对象。 我确信只要应用程序运行,我就需要一个对象。所以问
我有一堆 IDisposable查找表中的对象(现在是普通的旧字典<>),但为了简化代码并避免错误,我正在寻找一个“拥有”它所拥有的项目的集合类,并避免重新发明轮子 - 这样做一个类已经存在? 规范应
很久以前来自 C/C++ 的我仍然有确保所有资源都被正确清理的习惯。我总是确保在 IDisposable 类上调用 Dispose 并在包含一次性对象的类中实现 Dispose 模式。 但是,在我的环
如果我有实现 IDisposable 的接口(interface)(来自 apress 书中的示例)像这样 public interface IArchitectRepository : IDispo
问题是如何测试调用 Finalize 时对象释放资源的事实。类的代码: public class TestClass : IDisposable { public bool HasBeenDi
我是一名优秀的程序员,十分优秀!