问题标签 [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# - 即使抛出异常,HttpContext.Current 是否也会被释放?
我问的原因是因为该HttpContext.Current.Items
集合似乎是放置IDisposable
对象的好地方,例如 aDataContext
以便存储库可以透明地访问它,而不必将与特定 ORM 技术相关的任何依赖项注入到存储库中。这也将允许存储库决定是否参与UnitOfWork
或承担实际持久化任何更改的额外责任。
例如:
这页纸:
存储库:
当然,如果集合DataContext
中没有它,我会检查空值并执行获取 a 所需的步骤。HttpContext.Current.Items
所以,回到我最初的问题,给出上面的代码:即使抛出异常,它是否会与它的 Items 集合中包含的任何对象一起被处置?HttpContext.Current
.net - IDisposable 对象的标准集合
我IDisposable
在查找表中有一堆对象(现在是普通的旧 Dictionary<>),但为了简化代码并避免错误,我正在寻找一个“拥有”它所拥有的项目的集合类,并避免重新发明轮子——这样的课程是否已经存在?
规范应该是: - 收藏品必须是一次性的,并且当它被丢弃时,所有包含的物品也应该被丢弃。- 每当删除一个项目时,它Dispose()
首先是-d。- 理想情况下,集合将是通用的,类型约束强制执行IDisposable
所包含类型的 -ness。
我有点怀疑这样的课程是否存在,但我对之前的存在感到ReadOnlyCollection
惊喜ObservableCollection
......
本质上,我想要 C++ STL 容器的等价物,然后是 CLR ;-)。
c# - TcpClient 和 NetworkStream 配置问题
我正在使用这段代码来处理与服务器的连接并从客户端读取数据
现在,ReceiveMessage 方法调用BeginRead()
作为参数传递的 Stream,但我得到了 ObjectDisposedException。
我知道一个解决方案是当我不再需要 Stream 时调用 stream.Dispose() ,但我真的在寻找一个可以保持using
子句使用的解决方案。
谢谢
java - Should Closeable be used as the Java equivalent for .NET's IDisposable?
Update: As @PaulGroke points out below, things have changed with Java 7: there now is AutoCloseable. Which isn't tied to streams and supported by the new try-with-resources construct.
AutoCloseable
is the direct Java equivalent for .NET's IDisposable
interface.
The Closeable
interface introduced in Java 1.5 is tightly tied to streams, and even has an exception specifier for IOException
. This suggests that it should only be used for streams or other IO related activities, rather than general purpose cleanup logic.
Certainly the description for the close()
method would make absolutely no sense outside of a stream/IO context:
void close() throws IOException
Closes this stream and releases any system resources associated with it.
Should I therefore declare my own interface, Disposable
, with a Dispose()
method on it, and use that as an analogue to .NET's IDisposable
interface? Or should I re-use Closeable
even though it may not be a perfect fit?
asp.net - ASP.Net 是否在页面中的页面/控件上调用 Dispose,还是必须这样做?
鉴于 Control 类实现了 IDisposable,我认为 ASP.Net 至少能够触发 Dispose 级联,因为 Page 在离开浏览器的过程中完成了它的生命周期?
简单的问题:是这种情况,还是我必须这样做?
.net - 在哪里处置 ASP.net 页面的 IDisposable 成员?
处置IDisposable
ASP.net 页面成员的最佳做法是什么?
我是不是该, ...
- 使用
Page_Unload(object sender, EventArgs e)
事件 - 覆盖类的
void Dispose()
方法Control
- 别的东西……
??
c# - close, dispose, finalize, GC, Idisposable,....你对它们有清楚的描述吗?
我对关闭、处置、完成、GC、Idisposable 完全感到困惑。哦,你能把它们的详细描述发给我吗?
linq - 为什么 FxCop 在没有一次性字段的类上引发错误“拥有一次性字段的类型应该是一次性的”?
我有一个 LINQ 对象,其中添加了一个附加方法。该类没有一次性属性或方法,但 FxCop 引发错误“拥有一次性字段的类型应该是一次性的”并引用该类。
我已经减少了这么多的代码,但仍然收到错误:
但是,如果我删除了 from 子句中的任何一个,FxCop 就会停止给出错误:
或者
PagePermissionSet 不是一次性的。
这是误报吗?或者 LINQ 代码是否以某种方式在类上生成了一次性字段?如果不是误报,FxCop 建议我实现 IDisposable 接口,但我会在 Dispose 方法中做什么?
编辑:完整的 FxCop 错误是:
“在 'WikiPage' 上实现 IDisposable,因为它创建了以下 IDisposable 类型的成员:'WikiTomeDataContext'。如果 'WikiPage' 之前已发布,则将实现 IDisposable 的新成员添加到此类型被视为对现有消费者的重大更改。”
编辑2:这是引发错误的反汇编代码:
编辑 3:似乎确实有一个包含对 DataContext 的引用的闭包类。这是它的反汇编代码:
c# - 我如何说服我的同事不要在所有东西上实施 IDisposable?
我在一个项目中工作,其中有大量对象被几个类实例化,这些类在应用程序的整个生命周期内都保留在内存中。不时抛出 OutOfMemoryExceptions 会导致大量内存泄漏。似乎在实例化对象之前超出范围之后,它们没有被垃圾收集。
我已将问题隔离为主要与附加到永不分离的长寿命对象的事件处理程序有关,从而导致长寿命对象仍然具有对超出范围对象的引用,然后将永远不会垃圾收集。
我的同事提出的解决方案如下:在所有类上实现 IDisposable,全面和在 Dispose 方法中,使您的对象中的所有引用为空,并从您附加到的所有事件中分离。
我相信这是一个非常糟糕的主意。首先是因为它“矫枉过正”,因为这个问题主要可以通过修复一些问题区域来解决,其次是因为 IDisposable 的目的是释放您的对象控制的任何非托管资源,而不是因为您不信任垃圾收集器。到目前为止,我的论点被置若罔闻。我怎样才能让他们相信这是徒劳的?
garbage-collection - 为什么 GC 不会自动处置我班级的成员?
当我在 VS2008 中构建以下 C++/CLI 代码时,会显示代码分析警告 CA1001。
警告:CA1001:Microsoft.Design:在“B”上实现 IDisposable,因为它创建了以下 IDisposable 类型的成员:“A”。
要解决此警告,我必须将此代码添加到 B 类:
但我不明白为什么。A 类通过其析构函数(和终结器)实现 IDisposable。
因此,当 A 被垃圾回收时,肯定会调用 A 的终结器或析构函数,从而释放其非托管资源。
为什么 B 必须添加一个析构函数才能在其 A 成员上调用“删除”?
如果 B 显式调用“删除 m_a”,GC 是否只会调用 A 的析构函数?
编辑:如果您使用声明 A 成员的“语法糖”方法,这似乎会自动工作,如下所示:
但这并不总是可能的。
一旦没有其他人拥有指向它的指针,为什么 GC 不够聪明地自动处理 A^ 的托管引用指针?