问题标签 [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.
c# - 抽象基类的 TcpClient 字段不断被释放
我有一个带有 TcpClient 字段的抽象基类:
它有一种建立连接的方法:
而不是请求数据的方法:
还有一些其他的,例如 requestRawData 等……它们是非常特定的硬件通信协议所必需的,但这绝不是这个问题的一部分。
然后我有从这个类派生的类,它们覆盖了基类方法:
代码正常运行,但每次调用 setupConnection 方法时,TcpClient 实例(tcpClient)似乎都被释放了,因此创建了一个新实例并再次调用了 connect 方法,确实减慢了通信过程。
注意:子类的公共方法调用 requestData 方法,从使用该库的开发人员那里抽象出许多细节。
如SetDevicePower(byte PowerLevel)、QueryDeviceName()等...
像这样的代码:
导致 connect 方法被调用两次......为什么它在调用之间被处理?
c# - C# 中的一次性单例
我有一个使用“静态只读 T Instance = new T();”的单例 图案。但是,我遇到了 T 是一次性的,实际上需要为单元测试而被丢弃的情况。如何修改此模式以支持一次性单例?
我想要的界面是这样的:
注意 - 当然,模式必须是线程安全的。
编辑- 出于生产代码的目的,这是一个真正的单例。问题是它锁定了一些文件,因此为了在单元测试中进行清理,我们必须处理它。
如果可能的话,我也更喜欢可以重复使用的模式。
c# - Winforms 处理 IDisposable
有没有人有关于正确使用 dispose 和 IDisposable 的好文章或教程。我试图向一些初级开发人员解释这一点,并希望获得一些额外的材料、示例等。
.net - 我应该什么时候在 .NET 中处理我的对象?
对于一般代码,我真的需要处置一个对象吗?我可以在大多数情况下忽略它,还是在您 100% 确定不再需要它时始终处置它是个好主意?
dispose - SqlDataReader:在这种情况下,阅读器会被关闭吗?
我正在清理我继承的旧 .NET 1.1 项目中的 DataReaders。
之前的开发人员对数据访问层进行了编码,使得大多数 DAL 方法都返回 SqlDataReaders(因此将其留给调用者来正确调用 .Close() 或 .Dispose() 方法)。
但是,我遇到了一种情况,调用者没有捕获返回的 SqlDataReader (因此没有正确处理它)。请看下面的代码:
数据访问方法:
调用代码:
如您所见,调用方法没有接收/捕获返回的 SqlDataReader。那么会发生什么?那个 SqlDataReader 还在那里并打开吗?或者它会自动收集垃圾,因为没有任何东西可以解决它?
我想不出调试和测试的方法。如果有人有任何想法或建议,那就太好了。
c# - 使用派生自 System.ComponentModel.Component 的类实现 Dispose()
我创建了一个从 Component 派生的类:
我看到 Visual Studio 为我放入了这段代码:
MyComponent
有一个成员是 a DataSet
,也许还有其他一些成员实现IDisposable
. 如果有的话,我需要用Dispose()
方法修改什么以确保正确清理东西?感谢您的帮助。
c# - 我可以实现 DisposeBase 抽象类吗?
使用DisposableBase 基类而不是在每个类上重新编码 Dispose 模式是否存在问题或隐藏问题?
为什么不是每个人都使用这样一个相关的类?
编辑:
我自然只指实现 IDisposable 的类
我知道它用尽了继承的选择权,但我愿意付出代价(至少在我可以的时候,否则它不会伤害我)。
当我可以密封类时,我会这样做 - 但在某些情况下,我希望继承层次结构的基础是一次性的。
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 中没有这个问题,所以我可能不得不回到那个问题......
在发布代码之前,我需要稍微简化一下应用程序——但是之前有没有人在调试器中看到过这样的行为?
非常感谢!
c# - C# USING 关键字 - 何时以及何时不使用它?
我想知道什么时候应该和不应该将东西包装在 USING 块中。
据我了解,编译器将其转换为 try/finally,finally 在对象上调用 Dispose()。
我总是在数据库连接和文件访问周围使用 USING,但它更多的是出于习惯而不是 100% 的理解。我知道您应该明确(或使用)控制资源的 Dispose() 对象,以确保立即释放它们,而不是在 CLR 感觉时释放它们,但这就是我的理解崩溃的地方。
IDisposables 超出范围时是否不会被处置?
当我的对象使用 Dispose 来整理自己时,我是否只需要使用 USING ?
谢谢
编辑:我知道关于 USING 关键字还有其他几篇文章,但我对与 CLR 相关的答案以及内部发生的确切情况更感兴趣
安德鲁
.net - 我需要处理这个 Image 实例吗?
我正在制作一个简单的 Image Debugger Visualizer。代码如下。我不确定是否需要手动处理 Image 实例?因为我正在制作一个 windows 窗体窗口和里面包含我的动态图像的 PictureBox .. 当窗体终止时我需要添加一些特殊代码来处理这个吗?
这是代码..
谢谢你的帮助 :)