jjzjj

idisposable

全部标签

c# - 在 C# 中使用 IDisposable 与析构函数有什么区别?

我什么时候会在类而不是析构函数上实现IDispose?我读了thisarticle,但我仍然没有捕获要点。我的假设是,如果我在一个对象上实现IDispose,我可以明确地“破坏”它,而不是等待垃圾收集器来完成它。这是正确的吗?这是否意味着我应该始终在对象上显式调用Dispose?这有哪些常见的例子? 最佳答案 终结器(也称为析构函数)是垃圾收集(GC)的一部分-它何时(或什至是否)发生是不确定的,因为GC主要是由于内存压力(即需要更多空间)而发生的。终结器通常仅用于清理非托管资源,因为托管资源将有自己的收集/处置。因此,IDispo

c# - 在 C# 中使用 IDisposable 与析构函数有什么区别?

我什么时候会在类而不是析构函数上实现IDispose?我读了thisarticle,但我仍然没有捕获要点。我的假设是,如果我在一个对象上实现IDispose,我可以明确地“破坏”它,而不是等待垃圾收集器来完成它。这是正确的吗?这是否意味着我应该始终在对象上显式调用Dispose?这有哪些常见的例子? 最佳答案 终结器(也称为析构函数)是垃圾收集(GC)的一部分-它何时(或什至是否)发生是不确定的,因为GC主要是由于内存压力(即需要更多空间)而发生的。终结器通常仅用于清理非托管资源,因为托管资源将有自己的收集/处置。因此,IDispo

c# - 使用 IDisposable 和 "using"作为获取 "scoped behavior"以实现异常安全的手段是否滥用?

我在C++中经常使用的东西是让一个类A处理另一个类的状态进入和退出条件B,通过A构造函数和析构函数,以确保如果该范围内的某些内容引发异常,则B在退出范围时将具有已知状态。就首字母缩略词而言,这不是纯粹的RAII,但它仍然是一种既定的模式。在C#中,我经常想做classFrobbleManager{...privatevoidFiddleTheFrobble(){this.Frobble.Unlock();Foo();//Canthrowthis.Frobble.Fiddle();//CanthrowBar();//Canthrowthis.Frobble.Lock();}}需要这样做p

c# - 使用 IDisposable 和 "using"作为获取 "scoped behavior"以实现异常安全的手段是否滥用?

我在C++中经常使用的东西是让一个类A处理另一个类的状态进入和退出条件B,通过A构造函数和析构函数,以确保如果该范围内的某些内容引发异常,则B在退出范围时将具有已知状态。就首字母缩略词而言,这不是纯粹的RAII,但它仍然是一种既定的模式。在C#中,我经常想做classFrobbleManager{...privatevoidFiddleTheFrobble(){this.Frobble.Unlock();Foo();//Canthrowthis.Frobble.Fiddle();//CanthrowBar();//Canthrowthis.Frobble.Lock();}}需要这样做p

c# - 你如何防止 IDisposable 传播到你所有的类?

从这些简单的类开始......假设我有一组像这样的简单类:classBus{DriverbusDriver=newDriver();}classDriver{Shoe[]shoes={newShoe(),newShoe()};}classShoe{Shoelacelace=newShoelace();}classShoelace{booltied=false;}一个Bus有一个Driver,Driver有两个Shoe,每个Shoe有一个鞋带。都很傻。向Shoelace添加一个IDisposable对象后来我决定对Shoelace的某些操作可以是多线程的,因此我添加了一个EventWai

c# - 你如何防止 IDisposable 传播到你所有的类?

从这些简单的类开始......假设我有一组像这样的简单类:classBus{DriverbusDriver=newDriver();}classDriver{Shoe[]shoes={newShoe(),newShoe()};}classShoe{Shoelacelace=newShoelace();}classShoelace{booltied=false;}一个Bus有一个Driver,Driver有两个Shoe,每个Shoe有一个鞋带。都很傻。向Shoelace添加一个IDisposable对象后来我决定对Shoelace的某些操作可以是多线程的,因此我添加了一个EventWai

c# - 我什么时候应该使用 GC.SuppressFinalize()?

在.NET中,什么情况下应该使用GC.SuppressFinalize()?使用这种方法给我带来了什么好处? 最佳答案 SuppressFinalize只能由具有终结器的类调用。它通知垃圾收集器(GC)this对象已完全清理。当你有终结器时,推荐的IDisposable模式是:publicclassMyClass:IDisposable{privatebooldisposed=false;protectedvirtualvoidDispose(booldisposing){if(!disposed){if(disposing){//

c# - 我什么时候应该使用 GC.SuppressFinalize()?

在.NET中,什么情况下应该使用GC.SuppressFinalize()?使用这种方法给我带来了什么好处? 最佳答案 SuppressFinalize只能由具有终结器的类调用。它通知垃圾收集器(GC)this对象已完全清理。当你有终结器时,推荐的IDisposable模式是:publicclassMyClass:IDisposable{privatebooldisposed=false;protectedvirtualvoidDispose(booldisposing){if(!disposed){if(disposing){//

.net - 如何在.net 中处理一个类?

.NET垃圾收集器最终会释放内存,但如果您想要立即收回内存怎么办?类中需要使用什么代码MyClass打电话MyClass.Dispose()并释放MyClass中变量和对象的所有已用空间? 最佳答案 IDisposable与释放内存无关。IDisposable是一种释放非托管资源的模式——而内存绝对是一种托管资源。指向GC.Collect()的链接是正确答案,尽管Microsoft.NET文档通常不鼓励使用此函数。编辑:为这个答案赚了很多karma,我觉得有责任详细说明它,以免.NET资源管理的新手得到错误的印象。在.NET进程中,

.net - 如何在.net 中处理一个类?

.NET垃圾收集器最终会释放内存,但如果您想要立即收回内存怎么办?类中需要使用什么代码MyClass打电话MyClass.Dispose()并释放MyClass中变量和对象的所有已用空间? 最佳答案 IDisposable与释放内存无关。IDisposable是一种释放非托管资源的模式——而内存绝对是一种托管资源。指向GC.Collect()的链接是正确答案,尽管Microsoft.NET文档通常不鼓励使用此函数。编辑:为这个答案赚了很多karma,我觉得有责任详细说明它,以免.NET资源管理的新手得到错误的印象。在.NET进程中,