关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭6年前。Improvethisquestion我在一个项目中工作,其中有大量对象由几个类实例化,这些类在应用程序的生命周期内保留在内存中。不时抛出OutOfMemoryExceptions会导致大量内存泄漏。似乎在实例化对象超出范围之后,它们没有被垃圾收集。我已经将问题隔离为主要与附加到永远不会分离的长期对象的事件处理程序有关,从而导致长期对象仍然具有对范围外对象的引用,然后永远不会被垃圾收集。我的同事提出的解决方案如下:在所有类上全
如果.NET有垃圾回收功能,那么为什么你必须显式调用IDisposable? 最佳答案 垃圾回收是为了内存。您需要处理非内存资源-文件句柄、套接字、GDI+句柄、数据库连接等。这通常是IDisposable类型的基础,尽管实际句柄可能在链中很长一段路要走的引用资料。例如,您可以Dispose一个XmlWriter,它处理一个它引用的StreamWriter,它处理FileStream它有一个引用,释放文件句柄本身。 关于c#-IDisposable有什么用?,我们在StackOverfl
我认为以前没有人问过这个问题。我对在密封类上实现IDisposable的最佳方式有点困惑——具体来说,是不从基类继承的密封类。(也就是说,“纯密封类”是我编造的术语。)也许你们中的一些人同意我的看法,因为实现IDisposable的指南非常令人困惑。也就是说,我想知道我打算实现IDisposable的方式是否足够且安全。我正在执行一些通过Marshal.AllocHGlobal分配IntPtr的P/Invoke代码,当然,我想干净地处理我创建的非托管内存.所以我在想这样的事情usingSystem.Runtime.InteropServices;[StructLayout(Layout
已更改类名以保护无辜者。如果我有一个名为ISomeInterface的接口(interface)。我还有继承接口(interface)的类,FirstClass和SecondClass。FirstClass使用必须处理的资源。SecondClass没有。那么问题来了,我应该从哪里继承IDisposable呢?以下两个选项似乎都不太理想:1)让FirstClass继承IDisposable。然后,任何处理ISomeInterfaces的代码都必须知道是否要释放它们。这对我来说就像紧密耦合。2)使ISomeInterface继承IDisposable。然后,任何继承自它的类都必须实现IDi
如果我的结构实现了IDisposable,它在using语句中使用时会被装箱吗?谢谢编辑:这个timedlock是一个结构并实现了Idisposable。http://www.interact-sw.co.uk/iangblog/2004/04/26/yetmoretimedlocking编辑2:查看IL似乎如果您的结构将Dispose()公开为公共(public),如果您忘记调用Dispose()(例如,您是不使用“using”语句)? 最佳答案 根据EricLippert:AcalltoIDisposable.Disposeon
当您使用ThreadLocal时和T实现了IDisposable,您应该如何处理ThreadLocal中持有的成员?根据ILSpy,ThreadLocal的Dispose()和Dispose(bool)方法是publicvoidDispose(){this.Dispose(true);GC.SuppressFinalize(this);}protectedvirtualvoidDispose(booldisposing){intcurrentInstanceIndex=this.m_currentInstanceIndex;if(currentInstanceIndex>-1&&Int
我有一个父类和子类都需要实现IDisposable。virtual(和base.Dispose()?)调用应该在哪里发挥作用?当我只是重写Dispose(booldisposing)调用时,说我实现IDisposable而没有显式Dispose()函数感觉真的很奇怪(只利用继承的),但拥有其他一切。我一直在做的事情(相当琐碎):internalclassFooBase:IDisposable{SocketbaseSocket;privatevoidSendNormalShutdown(){}publicvoidDispose(){Dispose(true);GC.SuppressFin
在IDisposable.Dispose方法中有没有办法判断是否抛出异常?using(MyWrapperwrapper=newMyWrapper()){thrownewException("Baderror.");}如果在using语句中抛出异常,我想在释放IDisposable对象时了解它。 最佳答案 您可以扩展IDisposable用方法Complete并使用这样的模式:using(MyWrapperwrapper=newMyWrapper()){thrownewException("Baderror.");wrapper.Co
如果我有一个实现了IDisposable的SomeDisposableObject类:classSomeDisposableObject:IDisposable{publicvoidDispose(){//Dosomeimportantdisposalwork.}}我还有另一个名为AContainer的类,它有一个SomeDisposableObject的实例作为公共(public)属性:classAContainer{SomeDisposableObjectm_someObject=newSomeDisposableObject();publicSomeDisposableObjec
我在Windows8上用VisualStudio2012创建了一个WindowsForm应用,目标.NETframework是4.5,想用WindowsSDK的Datagramsocket库,所以把目标OS版本改成8,当我编译。我收到以下错误:"Error1Thetype'System.IDisposable'isdefinedinanassemblythatisnotreferenced.Youmustaddareferencetoassembly'System.Runtime,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b03f5f