1880得票20回答
IDisposable接口的正确使用方法

从阅读Microsoft文档了解到,IDisposable接口的“主要”作用是清理非托管资源。 对我来说,“非托管资源”意味着诸如数据库连接、套接字、窗口句柄等东西。但是,我看到过实现Dispose()方法以释放托管资源的代码,这对我来说似乎是多余的,因为垃圾回收器应该已经为你处理了这些。 例...

416得票13回答
在C#中使用Finalize/Dispose方法

C# 2008 我已经在这个问题上工作了一段时间,但仍然对代码中finalize和dispose方法的使用感到困惑。我的问题如下: 我知道我们只需要在处理非托管资源时才需要finalizer。然而,如果有托管资源调用非托管资源,是否还需要实现一个finalizer呢? 如果我开发的类不使...

416得票12回答
HttpClient和HttpClientHandler在请求之间需要被释放吗?

.NET Framework 4.5 中的 System.Net.Http.HttpClient 和 System.Net.Http.HttpClientHandler 实现了 IDisposable 接口(通过 System.Net.Http.HttpMessageInvoker)。 us...

382得票5回答
何时应该使用GC.SuppressFinalize()?

在.NET中,什么情况下应该使用GC.SuppressFinalize()? 使用这种方法有哪些优势?

225得票7回答
在使用块中间返回

类似于:using (IDisposable disposable = GetSomeDisposable()) { //..... //...... return Stg(); } 我认为在这里使用return语句不太合适,对吗?

216得票12回答
我应该Dispose() DataSet和DataTable吗?

DataSet和DataTable都实现了IDisposable接口,因此按照传统最佳实践,我应该调用它们的Dispose()方法。 然而,从我迄今为止所读到的内容来看,DataSet和DataTable实际上没有任何非托管资源,因此Dispose()并没有实际作用。 此外,我不能仅仅使用...

202得票5回答
在使用null对象的using语句中,Dispose()会被调用吗?

在一个(可能)为空的对象上使用using语句是否安全? 考虑以下示例:class Test { IDisposable GetObject(string name) { // returns null if not found } void DoSom...

197得票7回答
我应该为流对象调用Close()还是Dispose()方法?

像Stream、StreamReader、StreamWriter等类都实现了IDisposable接口。这意味着我们可以在这些类的对象上调用Dispose()方法。它们还定义了一个名为Close()的public方法。现在这让我感到困惑,一旦我完成对象使用后应该调用哪个方法?如果我两个方法都...

194得票2回答
使用和await使用有什么区别?我该如何决定使用哪个?

我注意到在某些情况下,Visual Studio建议这样做。await using var disposable = new Disposable(); // Do something 不要使用这个using var disposable = new Disposable(); // Do s...

151得票9回答
垃圾回收器会为我调用IDisposable.Dispose吗?

.NET的IDisposable模式暗示,如果你编写了一个终结器,并实现了IDisposable接口,那么你的终结器需要显式地调用Dispose方法。这是合乎逻辑的,在极少数情况下需要使用终结器时我一直都是这样做的。 但是,如果我只是这样做会发生什么: class Foo : IDispo...