问题标签 [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.

0 投票
7 回答
2558 浏览

c# - 您如何看待我的 IDisposable 模式实现?

您如何看待以下IDisposable模式实现?

使用上面的代码给了我这个错误:

{“尝试对非套接字的操作”} System.Net.Sockets.Socket.Poll(Int32 microSeconds, SelectMode 模式)

0 投票
8 回答
703 浏览

c# - 在 null 上使用是否有效?

如果资源没有实现 IDisposable,下面的代码会起作用吗?

0 投票
2 回答
4288 浏览

powershell - 如何在 PowerShell 中处理 System.Xml.XmlWriter

我正在尝试处理 XmlWriter 对象:

错误:

方法调用失败,因为 [System.Xml.XmlWellFormedWriter] 不包含名为“Dispose”的方法。

另一方面:

我该怎么办?

0 投票
3 回答
2120 浏览

vb.net - 为什么 VS2005/VB.NET 使用 Dispose(disposing as boolean) 重载实现 IDisposable 接口?

最近,我需要将 IDisposable 和对象终结的建议模式与 VS2005/VB.NET 提供的自动生成模式进行比较。我们已经使用了自动生成的一个,但是在并排查看它之后,我对 VB.NET 实现有很多疑问......

作为参考,这里是 IDE 的实现:

问题:

  1. 如果在 GC 期间调用 Finalize() 而没有首先显式调用 object.Dispose() 则 disposing:=false 并且“if disposing...”中的代码将永远不会执行以释放托管资源 - 导致它们保留在内存中直到下一次GC通过。为什么不明确释放这些?这样做不会在第一次 GC 传递时释放更多内存,并且不会在下一次传递之前将不需要的对象留在内存中吗?
  2. 为什么在 IDisposable 类上覆盖 Finalize() 时 IDE 不生成 Dispose(false) 调用?
  3. GC 如何知道调用 Dispose(false) 并确保它是 IDE 的实现,而不是以不同方式使用 bool 参数的自定义实现?* ...如果 GC 测试它的存在并以假定某个实现的方式使用它(object.Dispose(disposing:=false)),那么 Dispose(disposing as bool) 不应该是接口成员吗?* 在两者都存在的情况下Dispose()Dispose(disposing as boolean)为什么 GC 会选择调用重载的非接口成员?

总体而言,我对具有在显式调用时执行的扩展代码路径的假定附加值感到困惑Dispose()(与具有无论是否Dispose()显式调用都执行的公共路径相反)。虽然我可以理解它是出于善意提供的,但如果Dispose()不直接调用它,除了延迟托管资源的实际释放之外,我看不到它是如何做的。从本质上讲,它似乎只能使对象图中的托管资源无法访问,将它们孤立起来直到第二次 GC 运行,而不是在已知不再需要它们的时候释放它们。

0 投票
4 回答
2286 浏览

c# - GC 和 IDispose 在 C# 中如何工作?

我记得我是通过将图像从网络直接流式传输到位图中来加载图像的。关闭流,返回位图并将其保存在图像控件中。

当我执行 = loadPicture() 时,我例外,第一个位图会像 C++ 中的智能指针一样被释放。但它没有,我消耗了很多内存,直到我打电话给处置。所以我的问题是。

GC 和 Dispose 对象如何在 C# 中工作?为什么它不像 smart_ptr 那样实现?

0 投票
2 回答
303 浏览

.net - 如何汇总一个 IEnumerable

我有一个IEnumerable<IDisposable>需要在给定时间处理的集合。问题在于,在某些情况下,所有对象都属于一种类型,并且需要通过从对象中收集一些数据并进行一次 RPC 调用来处理对象。在其他情况下,对象将是另一种类型,我只需要对它们中的每一个调用 Dispose。

我控制执行此操作的代码,但我不想将实现细节推入其中。

如果必须,我可以切换到这样的东西,但它似乎不优雅。

编辑:列表(现在)将只包含一种类型或另一种类型,从不包含两者。但我宁愿 Dispose 代码根本不需要知道 RPC 的东西,ei:

0 投票
5 回答
4011 浏览

c# - 通过引用传递 IDisposable 对象会导致错误?

我正在尝试创建一个通用方法来处理实现IDisposable的对象,称为DisposeObject()

为了确保我正在处理由原始引用指向的对象,我试图通过引用传递一个对象。

但我收到一个编译错误,上面写着

'ref' 参数类型与参数类型不匹配

在下面的(简化的)代码中,两者都_Baz实现_BarIDisposable

替代文字

所以问题是,

  1. 为什么我会收到此错误?
  2. 有没有办法绕过它?

[更新] 从目前提供的答案来看,只要我不将 IDisposable 参数设置为 null,我就可以简单地按值传递对象,而无需使用ref. 我现在遇到了另一个麻烦,是否nullDisposeObject方法内设置一次性对象。

以下是完整性的完整来源:

[结果]
我删除了将参数设置为 null ( obj = null;)的代码,DisposeObject 所以最终的代码变成了。

0 投票
4 回答
676 浏览

c# - 会为匿名变量调用 dispose 吗?

例如,

没有 using 块,没有明显的方法来使用 using 块,没有明显的方法来调用 Dispose()。当然,UnmanagedResourceUsingMemorySuckingPig 确实实现了 IDisposable。

0 投票
12 回答
568 浏览

c# - 是否存在不依赖 IDisposable 的 Using 模式?

我想创建一个内部消息系统,可以告诉我调用某些代码的持续时间。我在考虑易于使用,使 SystemMessage 类实现 IDisposable。

我会在 SystemMessage 的构造函数期间设置一个时间戳,如果调用了 Dispose,我可以计算出持续时间。

问题是我不想让对象 GC'ed。我希望它作为 MessageCollection 的一部分保留。

C# 中是否有另一个构造可以让我使用 Using 语句的可用性,而无需踩到 IDisposable 的预期功能。

0 投票
1 回答
14681 浏览

linq-to-sql - C# Linq-to-Sql - 是否应使用 IDisposable 处理 DataContext

我有几种处理 DB 的方法,它们都从调用开始

既然 Linq2Sql DataContext 对象实现了 IDisposable,这应该和“using”一起使用吗?

以一种或另一种方式使用它有什么影响?