框架设计指南(第2版,第327页)说:CONSIDERprovidingmethodClose(),inadditiontotheDispose(),ifcloseisstandardterminologyinthearea.Whendoingso,itisimportantthatyoumaketheCloseimplementationidenticaltoDisposeandconsiderimplementingIDisposable.Disposemethodexplicitly.所以,按照提供的示例,我得到了这个类:publicclassSomeClass:IDisposa
假设我有以下内容:privateIEnumerableMyFunc(parametera){using(MyDataContextdc=newMyDataContext){returndc.tablename.Select(row=>row.parameter==a);}}privatevoidUsingFunc(){varresult=MyFunc(newa());foreach(varrowinresult){//Dosomething}}根据文档,linq执行将推迟到我实际枚举结果时,该结果出现在foreach的行中。但是,using语句应强制在调用MyFunct()结束时可靠地
我知道IDisposable接口(interface),它在.net中使用,但我心中有一个问题,如果我正在编写所有托管代码,是否实现了IDisposable接口(interface)有什么意义吗?我知道何时以及如何使用Idisposible但我的问题是如果我正在编写所有托管代码说一个简单的类没有什么昂贵所以如果我在这个类中实现IDisposable并做一些清理就像释放一些全局值,是否有意义? 最佳答案 不,您可能不需要使用IDisposble接口(interface)。但是,在某些情况下建议这样做(我可能会在以后添加更多,因为我记得
编辑:我的问题没有得到我正在寻找的主要答案。我不清楚。我真的很想知道两件事:不能调用Dispose()会导致内存泄漏吗?如果您有一个大型程序并且从不对任何IDisposable对象调用Dispose(),那么最糟糕的事情是什么?我的印象是,如果未对IDisposable对象调用Dispose(),可能会发生内存泄漏。根据关于此thread的讨论,我的看法是不正确的;如果未调用Dispose(),则不会发生内存泄漏。那为什么还要调用Dispose()呢?是否只是立即释放资源,而不是稍后释放资源?如果您有一个大型程序并且从不对任何IDisposable对象调用Dispose(),那么最糟糕
我们使用EnterpriseLibrary3.0访问OracleDB(MicrosoftOracle客户端)。如果在调用存储过程或函数后不释放DbCommand实例,会发生什么情况?.NET会自动对它们进行垃圾回收吗?请注意,我们会确保事务/连接得到关闭并妥善处理。 最佳答案 这是副本,但我没有时间找到原件。如果它实现了IDisposable,并且您创建了它,那么您需要对其调用Dispose。这就是该类的开发人员使其实现IDisposable的原因。垃圾收集器不会对所有IDisposable实现对象调用Dispose。
在answerIwrote的评论中我们讨论了内存泄漏和IDisposable,但我们没有得出任何真正的结论。处理非托管资源的类可能会实现IDisposable。如果忽略它并且既不调用Dispose也不将对象包装在using中-这会导致非托管资源被泄漏吗?还是会在GC回收对象的时候进行适当的清理?我们可以假设处理非托管资源的类具有IDisposable的正确实现,包括终结器等。 最佳答案 它不会导致内存泄漏。事实上,Dispose与内存管理完全无关。它将造成资源泄漏。虽然GC通常会清理它,但这可能太少也太晚了。省略Dispose(us
这就是我想要做的:privateKinectAudioSourceCreateAudioSource(){varsource=KinectSensor.KinectSensors[0].AudioSource;source.NoiseSuppression=_isNoiseSuppressionOn;source.AutomaticGainControlEnabled=_isAutomaticGainOn;returnsource;}privateobjectlockObj=newobject();privatevoidRecordKinectAudio(){lock(lockObj)
我正在广泛使用DataVisualization.Charting.Chart,而且大部分情况下它都能正常工作。但是,我经常运行代码分析,并处理了我自己的所有警告。但是,在使用图表的*.Designer.cs文件中大约有30个CA2000(对象未沿所有异常路径放置)。Designer文件生成了几乎所有的图表代码,并且几乎所有的图表元素都实现了IDisposable。我在项目首选项中选中了“抑制生成代码的结果”,但它仍然如此。有什么方法可以解决这个问题,而不必手动创建图表对象,也不必为该类中的其余代码禁用代码分析?有没有办法为所有.Designer.cs文件禁用它?或者,是否有一种解决方
我有一个接口(interface)的实现,该接口(interface)扩展了IDisposable。在我的特定接口(interface)实现中,我不需要处理任何东西,所以我只有一个空的Dispose()方法。publicinterfaceIMyStuff:IDisposable{}publicMyStuffImpl:IMyStuff{publicvoidDispose(){}}现在在FxCop中,这会导致CA1063:Error,Certainty95,forImplementIDisposableCorrectly{Resolution:"Provideanoverridableim
C#LanguageSpecification3.0的第10.13节,析构函数声明如下:Destructorsarenotinherited.Thus,aclasshasnodestructorsotherthantheonewhichmaybedeclaredinthatclass.C#ProgrammingGuide的析构函数部分包含一个示例,演示如何调用继承层次结构中的析构函数,包括以下语句:...thedestructorsforthe...classesarecalledautomatically,andinorder,fromthemost-derivedtotheleas