问题标签 [dispose]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
1051 浏览

.net - 我什么时候应该手动处理控件?我如何知道控件是否实现了 IDisposable?

在上一个关于删除旧 NotifyIcon 的系统托盘的问题中,有人告诉我我应该处理任何实现 IDisposable 的东西。对我来说听起来像是一个很好的做法,但是作为一个新手,它提出了更多的问题:-)

我如何知道控件是否实现了 IDisposable?

我应该建立一个类来尝试在 formclose 事件中处理我所有表单上的所有内容吗?

像这样的东西?(伪代码):

如果不是,那么我怎么知道我需要手动处理哪些控件,或者我应该在测试期间简单地观察异常行为?

G

编辑:所以当我点击我的孩子表单上的大红色“X”时,这不会导致它被丢弃吗?是对的吗?这是什么原因?

0 投票
8 回答
1914 浏览

c# - 我怎么知道什么时候需要处理一个对象?

我怎么知道什么时候需要处理一些东西?有人刚刚提到我的代码中有几个需要处理的对象。我不知道我需要处理任何东西(这是我使用 C# 的第一周)。我怎么知道什么时候需要处理一个对象?我正在使用http://msdn.microsoft.com/en-us/library/system.security.cryptography.hashalgorithm.aspx,我没有看到页面上提到 dispose 或看到我在任何其他 objs 中提到它告诉我处置(由某人在SO上)。

我知道我需要什么时候继承 IDisposable 但我怎么知道它什么时候继承它?

0 投票
6 回答
36780 浏览

c# - 为什么在析构函数中调用 dispose(false)?

下面是一个典型的 dispose 模式示例:

我了解 dispose 的作用,但我不明白为什么要在析构函数中调用 dispose(false) ?如果您查看定义,它绝对不会做任何事情,那么为什么有人会编写这样的代码呢?根本不从析构函数调用 dispose是否有意义?

0 投票
4 回答
1843 浏览

.net - IDisposable 接口如何工作?

我知道它用于释放非托管资源,但是,我对何时Dispose实际调用感到困惑。我知道它在块的末尾被using调用,但是当对象被垃圾收集时它也会被调用吗?

0 投票
4 回答
4482 浏览

c# - 我的代码是否正确清理了它的列表?

我有一个执行 PDF 文件操作的第三方组件。每当我需要执行操作时,我都会从文档存储(数据库、SharePoint、文件系统等)中检索 PDF 文档。为了使事情有点一致,我将 PDF 文档作为byte[].

这个第 3 方组件需要一个MemoryStream[]( MemoryStreamarray) 作为我需要使用的主要方法之一的参数。

我正在尝试将此功能包装在我自己的组件中,以便我可以将此功能用于我的应用程序中的许多区域。我基本上提出了以下几点:

我的“包装器”的调用代码如下所示:

关于上面的几个问题:

  1. 方法中的using子句是AddFileToManipulate()多余的和不必要的吗?
  2. Dispose()我在我的对象的方法中清理东西好吗?
  3. 这是“可接受的”用法MemoryStream吗?我预计内存中不会同时有很多文件......总共可能有 1-10 个 PDF 页,每页大约 200KB。设计为在支持 ASP.NET 站点的服务器上运行的应用程序。
  4. 有什么意见/建议吗?

感谢代码审查 :)

0 投票
7 回答
8552 浏览

c# - 您如何防止 IDisposable 传播到您的所有班级?

从这些简单的类开始......

假设我有一组简单的类,如下所示:

ABus有 a Driver, theDriver有两个Shoes,每个Shoe都有 a Shoelace。都非常傻。

将 IDisposable 对象添加到 Shoelace

后来我决定一些操作Shoelace可以是多线程的,所以我添加了一个EventWaitHandle用于线程通信的线程。所以Shoelace现在看起来像这样:

在鞋带上实现 IDisposable

但现在微软的 FxCop会抱怨:“在 'Shoelace' 上实现 IDisposable,因为它会创建以下 IDisposable 类型的成员:'EventWaitHandle'。”

好的,我实现IDisposableShoelace,我整洁的小班变成了可怕的一团糟:

或者(正如评论者所指出的)因为Shoelace它本身没有非托管资源,我可以使用更简单的 dispose 实现而不需要Dispose(bool)and 析构函数:

惊恐地看着 IDisposable 传播

没错,就是这么固定的。但是现在 FxCop 会抱怨Shoe创建了一个Shoelace,所以也Shoe必须IDisposable如此。

并且Driver创造必须Shoe如此。并创造必须如此等等。DriverIDisposableBusDriverBusIDisposable

突然间Shoelace,我BusShoelace.

问题

您如何防止IDisposable.

0 投票
7 回答
56097 浏览

c# - 在 using 块的中间返回

就像是:

我认为这不是退货声明的合适位置,是吗?

0 投票
3 回答
2994 浏览

c# - Dispose 在用户控件上,真的是要编辑 .designer.cs 文件吗?

对于具有必须释放的内部数据结构的用户控件,将该代码添加到 .designer.cs 文件中的 Dispose 方法的正确位置是否正确,或者是否有一个事件或我们打算使用的东西?

编辑:这是一个 winforms 用户控件。

0 投票
10 回答
7402 浏览

c# - 谁处置 IDisposable 公共财产?

如果我有一个SomeDisposableObject实现的类IDisposable

我还有另一个名为 的类AContainer,它有一个SomeDisposableObject作为公共属性的实例:

然后FxCop会坚持说AContainer也是造的IDisposable

这很好,但我看不到如何安全地调用m_someObject.Dispose()from AContainer.Dispose(),因为另一个类可能仍然有对该m_someObject实例的引用。

避免这种情况的最佳方法是什么?

(假设其他代码依赖于AContainer.SomeObject始终具有非空值,因此简单地将实例的创建移到外部AContainer不是一种选择)

编辑:我将用一些例子进行扩展,因为我认为一些评论者错过了这个问题。如果我只是实现一个调用 m_someObject.Dispose() 的方法,那么我会遇到以下情况Dispose()AContainer

这有帮助吗?

0 投票
5 回答
1410 浏览

c# - 如何强制 SQLconnection 释放数据库?

我编写了一个小应用程序,可以恢复数据库(C# 和 SQL2005),但是在我访问数据库后,我无法删除它 - 它说它正在使用中。我想这与SQLconnection-pooling,但我可以强制它释放数据库吗?