问题标签 [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 投票
1 回答
380 浏览

c# - 抽象基类的 TcpClient 字段不断被释放

我有一个带有 TcpClient 字段的抽象基类:

它有一种建立连接的方法:

而不是请求数据的方法:

还有一些其他的,例如 requestRawData 等……它们是非常特定的硬件通信协议所必需的,但这绝不是这个问题的一部分。

然后我有从这个类派生的类,它们覆盖了基类方法:

代码正常运行,但每次调用 setupConnection 方法时,TcpClient 实例(tcpClient)似乎都被释放了,因此创建了一个新实例并再次调用了 connect 方法,确实减慢了通信过程。

注意:子类的公共方法调用 requestData 方法,从使用该库的开发人员那里抽象出许多细节。

如SetDevicePower(byte PowerLevel)、QueryDeviceName()等...

像这样的代码:

导致 connect 方法被调用两次......为什么它在调用之间被处理?

0 投票
8 回答
15952 浏览

c# - C# 中的一次性单例

我有一个使用“静态只读 T Instance = new T();”的单例 图案。但是,我遇到了 T 是一次性的,实际上需要为单元测试而被丢弃的情况。如何修改此模式以支持一次性单例?

我想要的界面是这样的:

注意 - 当然,模式必须是线程安全的。

编辑- 出于生产代码的目的,这是一个真正的单例。问题是它锁定了一些文件,因此为了在单元测试中进行清理,我们必须处理它。

如果可能的话,我也更喜欢可以重复使用的模式。

0 投票
4 回答
2034 浏览

c# - Winforms 处理 IDisposable

有没有人有关于正确使用 dispose 和 IDisposable 的好文章或教程。我试图向一些初级开发人员解释这一点,并希望获得一些额外的材料、示例等。

0 投票
8 回答
15751 浏览

.net - 我应该什么时候在 .NET 中处理我的对象?

对于一般代码,我真的需要处置一个对象吗?我可以在大多数情况下忽略它,还是在您 100% 确定不再需要它时始终处置它是个好主意?

0 投票
1 回答
765 浏览

dispose - SqlDataReader:在这种情况下,阅读器会被关闭吗?

我正在清理我继承的旧 .NET 1.1 项目中的 DataReaders。

之前的开发人员对数据访问层进行了编码,使得大多数 DAL 方法都返回 SqlDataReaders(因此将其留给调用者来正确调用 .Close() 或 .Dispose() 方法)。

但是,我遇到了一种情况,调用者没有捕获返回的 SqlDataReader (因此没有正确处理它)。请看下面的代码:

数据访问方法:

调用代码:

如您所见,调用方法没有接收/捕获返回的 SqlDataReader。那么会发生什么?那个 SqlDataReader 还在那里并打开吗?或者它会自动收集垃圾,因为没有任何东西可以解决它?

我想不出调试和测试的方法。如果有人有任何想法或建议,那就太好了。

0 投票
4 回答
2127 浏览

c# - 使用派生自 System.ComponentModel.Component 的类实现 Dispose()

我创建了一个从 Component 派生的类:

我看到 Visual Studio 为我放入了这段代码:

MyComponent有一个成员是 a DataSet,也许还有其他一些成员实现IDisposable. 如果有的话,我需要用Dispose()方法修改什么以确保正确清理东西?感谢您的帮助。

0 投票
3 回答
749 浏览

c# - 我可以实现 DisposeBase 抽象类吗?

使用DisposableBase 基类而不是在每个类上重新编码 Dispose 模式是否存在问题或隐藏问题?

为什么不是每个人都使用这样一个相关的类?

编辑

  1. 我自然只指实现 IDisposable 的类

  2. 我知道它用尽了继承的选择权,但我愿意付出代价(至少在我可以的时候,否则它不会伤害我)。

  3. 当我可以密封类时,我会这样做 - 但在某些情况下,我希望继承层次结构的基础是一次性的。

0 投票
5 回答
3832 浏览

winforms - 调试 .NET winform 时从 SerialPort 引起 ObjectDisposedException 的原因是什么?

Vista SP1 Visual Studio 2008 SP1 .NET 3.5 SP1 C#

我有一个我正在玩的 winforms 应用程序,它使用 SerialPort 对象作为私有变量。当应用程序被编译和执行时,它工作得很好。它也可以在没有任何断点的调试模式下运行。90% 的情况下,当我在断点处停止并尝试单步执行代码时,我会得到一个“出现未处理的异常”对话框,其中包含以下详细信息:

System.ObjectDisposedException 未处理 Message="Safe handle has been closed" Source="mscorlib" ObjectName="" StackTrace: at Microsoft.Win32.Win32Native.SetEvent(SafeWaitHandle handle) at System.Threading.EventWaitHandle.Set() at System。 IO.Ports.SerialStream.AsyncFSCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOverlapped) 在 System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP) InnerException:

令人沮丧的是,我不必跳过与串行相关的代码!我只需要对端口做点什么。所以我可能会读取一个字符串,操作该字符串,将两个数字相加,无论如何,然后 BANG。

同样,在不调试时,或者在没有任何断点的情况下调试时,这工作得很好。似乎有一些关于在断点处停止的东西,这使得 CLR 在不同的线程上处理 SerialStream。

网上有很多关于更新 USB 设备导致此问题的讨论。但我使用的是 COM1 上的内置主板端口。

我认为我在 .NET 2.0 中没有这个问题,所以我可能不得不回到那个问题......

在发布代码之前,我需要稍微简化一下应用程序——但是之前有没有人在调试器中看到过这样的行为?

非常感谢!

0 投票
3 回答
13905 浏览

c# - C# USING 关键字 - 何时以及何时不使用它?

我想知道什么时候应该和不应该将东西包装在 USING 块中。

据我了解,编译器将其转换为 try/finally,finally 在对象上调用 Dispose()。

我总是在数据库连接和文件访问周围使用 USING,但它更多的是出于习惯而不是 100% 的理解。我知道您应该明确(或使用)控制资源的 Dispose() 对象,以确保立即释放它们,而不是在 CLR 感觉时释放它们,但这就是我的理解崩溃的地方。

IDisposables 超出范围时是否不会被处置?

当我的对象使用 Dispose 来整理自己时,我是否只需要使用 USING ?

谢谢

编辑:我知道关于 USING 关键字还有其他几篇文章,但我对与 CLR 相关的答案以及内部发生的确切情况更感兴趣

安德鲁

0 投票
4 回答
1873 浏览

.net - 我需要处理这个 Image 实例吗?

我正在制作一个简单的 Image Debugger Visualizer。代码如下。我不确定是否需要手动处理 Image 实例?因为我正在制作一个 windows 窗体窗口和里面包含我的动态图像的 PictureBox .. 当窗体终止时我需要添加一些特殊代码来处理这个吗?

这是代码..

谢谢你的帮助 :)