问题标签 [idisposable]
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# - 您如何看待我的 IDisposable 模式实现?
您如何看待以下IDisposable
模式实现?
使用上面的代码给了我这个错误:
{“尝试对非套接字的操作”} System.Net.Sockets.Socket.Poll(Int32 microSeconds, SelectMode 模式)
c# - 在 null 上使用是否有效?
如果资源没有实现 IDisposable,下面的代码会起作用吗?
powershell - 如何在 PowerShell 中处理 System.Xml.XmlWriter
我正在尝试处理 XmlWriter 对象:
错误:
方法调用失败,因为 [System.Xml.XmlWellFormedWriter] 不包含名为“Dispose”的方法。
另一方面:
我该怎么办?
vb.net - 为什么 VS2005/VB.NET 使用 Dispose(disposing as boolean) 重载实现 IDisposable 接口?
最近,我需要将 IDisposable 和对象终结的建议模式与 VS2005/VB.NET 提供的自动生成模式进行比较。我们已经使用了自动生成的一个,但是在并排查看它之后,我对 VB.NET 实现有很多疑问......
作为参考,这里是 IDE 的实现:
问题:
- 如果在 GC 期间调用 Finalize() 而没有首先显式调用 object.Dispose() 则 disposing:=false 并且“if disposing...”中的代码将永远不会执行以释放托管资源 - 导致它们保留在内存中直到下一次GC通过。为什么不明确释放这些?这样做不会在第一次 GC 传递时释放更多内存,并且不会在下一次传递之前将不需要的对象留在内存中吗?
- 为什么在 IDisposable 类上覆盖 Finalize() 时 IDE 不生成 Dispose(false) 调用?
- GC 如何知道调用 Dispose(false) 并确保它是 IDE 的实现,而不是以不同方式使用 bool 参数的自定义实现?* ...如果 GC 测试它的存在并以假定某个实现的方式使用它(object.Dispose(disposing:=false)),那么 Dispose(disposing as bool) 不应该是接口成员吗?* 在两者都存在的情况下
Dispose()
,Dispose(disposing as boolean)
为什么 GC 会选择调用重载的非接口成员?
总体而言,我对具有在显式调用时执行的扩展代码路径的假定附加值感到困惑Dispose()
(与具有无论是否Dispose()
显式调用都执行的公共路径相反)。虽然我可以理解它是出于善意提供的,但如果Dispose()
不直接调用它,除了延迟托管资源的实际释放之外,我看不到它是如何做的。从本质上讲,它似乎只能使对象图中的托管资源无法访问,将它们孤立起来直到第二次 GC 运行,而不是在已知不再需要它们的时候释放它们。
c# - GC 和 IDispose 在 C# 中如何工作?
我记得我是通过将图像从网络直接流式传输到位图中来加载图像的。关闭流,返回位图并将其保存在图像控件中。
当我执行 = loadPicture() 时,我例外,第一个位图会像 C++ 中的智能指针一样被释放。但它没有,我消耗了很多内存,直到我打电话给处置。所以我的问题是。
GC 和 Dispose 对象如何在 C# 中工作?为什么它不像 smart_ptr 那样实现?
.net - 如何汇总一个 IEnumerable
我有一个IEnumerable<IDisposable>
需要在给定时间处理的集合。问题在于,在某些情况下,所有对象都属于一种类型,并且需要通过从对象中收集一些数据并进行一次 RPC 调用来处理对象。在其他情况下,对象将是另一种类型,我只需要对它们中的每一个调用 Dispose。
我控制执行此操作的代码,但我不想将实现细节推入其中。
如果必须,我可以切换到这样的东西,但它似乎不优雅。
编辑:列表(现在)将只包含一种类型或另一种类型,从不包含两者。但我宁愿 Dispose 代码根本不需要知道 RPC 的东西,ei:
c# - 通过引用传递 IDisposable 对象会导致错误?
我正在尝试创建一个通用方法来处理实现IDisposable的对象,称为DisposeObject()
为了确保我正在处理由原始引用指向的对象,我试图通过引用传递一个对象。
但我收到一个编译错误,上面写着
'ref' 参数类型与参数类型不匹配
在下面的(简化的)代码中,两者都_Baz
实现_Bar
了IDisposable。
所以问题是,
- 为什么我会收到此错误?
- 有没有办法绕过它?
[更新]
从目前提供的答案来看,只要我不将 IDisposable 参数设置为 null,我就可以简单地按值传递对象,而无需使用ref
. 我现在遇到了另一个麻烦,是否null
在DisposeObject
方法内设置一次性对象。
以下是完整性的完整来源:
[结果]
我删除了将参数设置为 null ( obj = null;
)的代码,DisposeObject
所以最终的代码变成了。
c# - 会为匿名变量调用 dispose 吗?
例如,
没有 using 块,没有明显的方法来使用 using 块,没有明显的方法来调用 Dispose()。当然,UnmanagedResourceUsingMemorySuckingPig 确实实现了 IDisposable。
c# - 是否存在不依赖 IDisposable 的 Using 模式?
我想创建一个内部消息系统,可以告诉我调用某些代码的持续时间。我在考虑易于使用,使 SystemMessage 类实现 IDisposable。
我会在 SystemMessage 的构造函数期间设置一个时间戳,如果调用了 Dispose,我可以计算出持续时间。
问题是我不想让对象 GC'ed。我希望它作为 MessageCollection 的一部分保留。
C# 中是否有另一个构造可以让我使用 Using 语句的可用性,而无需踩到 IDisposable 的预期功能。
linq-to-sql - C# Linq-to-Sql - 是否应使用 IDisposable 处理 DataContext
我有几种处理 DB 的方法,它们都从调用开始
既然 Linq2Sql DataContext 对象实现了 IDisposable,这应该和“using”一起使用吗?
以一种或另一种方式使用它有什么影响?