问题标签 [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.
.net - 我什么时候应该手动处理控件?我如何知道控件是否实现了 IDisposable?
在上一个关于删除旧 NotifyIcon 的系统托盘的问题中,有人告诉我我应该处理任何实现 IDisposable 的东西。对我来说听起来像是一个很好的做法,但是作为一个新手,它提出了更多的问题:-)
我如何知道控件是否实现了 IDisposable?
我应该建立一个类来尝试在 formclose 事件中处理我所有表单上的所有内容吗?
像这样的东西?(伪代码):
如果不是,那么我怎么知道我需要手动处理哪些控件,或者我应该在测试期间简单地观察异常行为?
G
编辑:所以当我点击我的孩子表单上的大红色“X”时,这不会导致它被丢弃吗?是对的吗?这是什么原因?
c# - 我怎么知道什么时候需要处理一个对象?
我怎么知道什么时候需要处理一些东西?有人刚刚提到我的代码中有几个需要处理的对象。我不知道我需要处理任何东西(这是我使用 C# 的第一周)。我怎么知道什么时候需要处理一个对象?我正在使用http://msdn.microsoft.com/en-us/library/system.security.cryptography.hashalgorithm.aspx,我没有看到页面上提到 dispose 或看到我在任何其他 objs 中提到它告诉我处置(由某人在SO上)。
我知道我需要什么时候继承 IDisposable 但我怎么知道它什么时候继承它?
c# - 为什么在析构函数中调用 dispose(false)?
下面是一个典型的 dispose 模式示例:
我了解 dispose 的作用,但我不明白为什么要在析构函数中调用 dispose(false) ?如果您查看定义,它绝对不会做任何事情,那么为什么有人会编写这样的代码呢?根本不从析构函数调用 dispose是否有意义?
.net - IDisposable 接口如何工作?
我知道它用于释放非托管资源,但是,我对何时Dispose
实际调用感到困惑。我知道它在块的末尾被using
调用,但是当对象被垃圾收集时它也会被调用吗?
c# - 我的代码是否正确清理了它的列表?
我有一个执行 PDF 文件操作的第三方组件。每当我需要执行操作时,我都会从文档存储(数据库、SharePoint、文件系统等)中检索 PDF 文档。为了使事情有点一致,我将 PDF 文档作为byte[]
.
这个第 3 方组件需要一个MemoryStream[]
( MemoryStream
array) 作为我需要使用的主要方法之一的参数。
我正在尝试将此功能包装在我自己的组件中,以便我可以将此功能用于我的应用程序中的许多区域。我基本上提出了以下几点:
我的“包装器”的调用代码如下所示:
关于上面的几个问题:
- 方法中的
using
子句是AddFileToManipulate()
多余的和不必要的吗? Dispose()
我在我的对象的方法中清理东西好吗?- 这是“可接受的”用法
MemoryStream
吗?我预计内存中不会同时有很多文件......总共可能有 1-10 个 PDF 页,每页大约 200KB。设计为在支持 ASP.NET 站点的服务器上运行的应用程序。 - 有什么意见/建议吗?
感谢代码审查 :)
c# - 您如何防止 IDisposable 传播到您的所有班级?
从这些简单的类开始......
假设我有一组简单的类,如下所示:
ABus
有 a Driver
, theDriver
有两个Shoe
s,每个Shoe
都有 a Shoelace
。都非常傻。
将 IDisposable 对象添加到 Shoelace
后来我决定一些操作Shoelace
可以是多线程的,所以我添加了一个EventWaitHandle
用于线程通信的线程。所以Shoelace
现在看起来像这样:
在鞋带上实现 IDisposable
但现在微软的 FxCop会抱怨:“在 'Shoelace' 上实现 IDisposable,因为它会创建以下 IDisposable 类型的成员:'EventWaitHandle'。”
好的,我实现IDisposable
了Shoelace
,我整洁的小班变成了可怕的一团糟:
或者(正如评论者所指出的)因为Shoelace
它本身没有非托管资源,我可以使用更简单的 dispose 实现而不需要Dispose(bool)
and 析构函数:
惊恐地看着 IDisposable 传播
没错,就是这么固定的。但是现在 FxCop 会抱怨Shoe
创建了一个Shoelace
,所以也Shoe
必须IDisposable
如此。
并且Driver
创造必须Shoe
如此。并创造必须如此等等。Driver
IDisposable
Bus
Driver
Bus
IDisposable
突然间Shoelace
,我Bus
对Shoelace
.
问题
您如何防止IDisposable
.
c# - 在 using 块的中间返回
就像是:
我认为这不是退货声明的合适位置,是吗?
c# - Dispose 在用户控件上,真的是要编辑 .designer.cs 文件吗?
对于具有必须释放的内部数据结构的用户控件,将该代码添加到 .designer.cs 文件中的 Dispose 方法的正确位置是否正确,或者是否有一个事件或我们打算使用的东西?
编辑:这是一个 winforms 用户控件。
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
这有帮助吗?
c# - 如何强制 SQLconnection 释放数据库?
我编写了一个小应用程序,可以恢复数据库(C# 和 SQL2005),但是在我访问数据库后,我无法删除它 - 它说它正在使用中。我想这与SQLconnection-pooling,但我可以强制它释放数据库吗?