16得票4回答
使用Reactive Extensions for .NET时,如何处理对IDisposable的引用:总是、从不或有时?

迄今为止,我一直在热心地保留 Rx 中任何 .Subscribe(...)、.Connect(...) 等方法返回的 IDisposable 引用。我这么做是因为我担心如果不保留引用,垃圾回收将会处理掉这个 disposable。 但是,我在 LINQPad 中进行了一些没有保留引用的 .S...

55得票2回答
在using() { }块中使用yield return语句时,在执行之前进行处理

我编写了自己的自定义数据层以将数据持久化到特定文件,并使用自定义DataContext模式进行了抽象。 这完全基于.NET 2.0框架(给定目标服务器的限制),因此即使其中一些看起来像LINQ-to-SQL,也不是!我只是实现了类似的数据模式。 请参考下面的示例,其中有一个我尚未解释清楚的...

8得票7回答
C# IDisposable Using:最佳实践

我一直在使用USING语句来包装我的OracleConnection和OracleCommand对象,但是在运行代码分析器后,我发现OracleParameter也实现了IDisposable。以下代码是否正确?有没有更好的可读性或结构技巧?乍一看,它似乎只是充斥着USING语句: usin...

11得票8回答
避免处理系统定义的笔和画刷实例。

据我所知,最佳实践是在使用Pen和Brush的实例时调用Dispose()方法,但若它们已被设置为系统预定义值(例如System.Drawing.Brushes、System.Drawing.Pens或System.Drawing.SystemBrushes),则无需这样做。 试图释放系统定...

28得票3回答
在处理时,托管资源和本机资源有什么区别?(.NET)

我正在阅读有关如何实现IDisposable的MSDN文章,但是我对文章中提到的托管资源和本机资源之间的区别感到不确定。 我有一个类,在被处理时必须处理其中的两个字段。我应该将它们视为托管资源(仅在disposing = true时进行处理)还是本机资源?

8得票7回答
C# Dispose Pattern的具体问题

我有几个关于C#中Dispose模式的基本问题。 在以下代码片段中,这似乎是实现dispose模式的标准方式,你会注意到如果disposing为false,则不处理托管资源。那么它们是如何处理的?GC会稍后处理托管资源吗?但如果是这样,GG.SuppressFinalize(this)调用是...

31得票6回答
如何正确释放ThreadLocal<IDisposable>中持有的元素?

当您使用 ThreadLocal&lt;T&gt;,且 T 实现了 IDisposable 接口时,您应该如何处理 ThreadLocal 中持有的成员的处理? 根据 ILSpy 的分析,ThreadLocal 的 Dispose() 和 Dispose(bool) 方法如下: publi...

68得票15回答
“Dispose” 方法只适用于包含非托管资源的类型吗?

最近我和同事就实现Dispose和实现IDisposable接口的类型的价值进行了讨论。 我认为对于应该尽快清理的类型,即使没有未受控资源需要清理,实现IDisposable也是有价值的。 我的同事持不同意见。他认为如果没有未受控资源,实现IDisposable是不必要的,因为您的类型最终会被...

23得票3回答
确定托管资源与非托管资源

关于托管资源和非托管资源有许多问题。我理解了这两者的基本定义。然而,我很难知道何时资源或对象是托管的还是非托管的。 当我想到非托管资源时,我往往会想到不直接属于.NET的本机代码,例如pinvoke或封送资源。我通常会认为旨在与将使用硬件的某些东西进行接口的资源,例如文件句柄或网络连接也是非...

11得票1回答
为什么即使服务仍在引用DataContract,Dispose也会被调用?

我已经定义了下面这个实现了IDisposable的DataContract:[DataContract] public class RegularFileMetadata : FileMetadataBase, IDisposable { bool _Disposed = false; ...