XMLDocument类似乎是支持IDisposable的理想候选者,因为...它可能会保存大量数据。它代表一个可能复杂的数据模型。这将允许您在Using{...}语句中使用它,并且它会在使用后立即被垃圾回收。但是它似乎不支持它。在那种情况下,最好的处理方法是什么?或者它不需要支持IDisposable-我想您可以在完成它后将其引用设置为null吗?或者这里的主要区别是它不占用外部资源,例如数据库连接或外部文件,因此不需要IDispoable“支持”? 最佳答案 ThiswouldallowyoutouseitinsideaUsin
我找不到这个问题的答案。出于好奇,为什么XmlNodeListclass在.NET4.5中实现IDisposable而在以前的版本中没有实现? 最佳答案 很可能出于与IEnumerator相同的原因工具IDisposable但是IEnumerator不会——较早的版本是在作者考虑到一个实现可能需要清理的情况之前编写的,但是返回这种实现的工厂可能不知道这种需要。例如,一个类可能接受一个文件名并提供一个“实时”XmlNodeList。来自那个文件;IDisposable.DisposeXmlList的方法将关闭基础文件。如果接口(int
我已经开始使用实现IDisposable的类通过using语句在流中写入block。这有助于保持正确的嵌套并避免丢失或错误放置开始/结束部分。基本上,构造函数写入block的开始(例如打开XML标记),Dispose()结束(例如关闭XML标记)。示例是下面的UsableXmlElement(它用于大型XML,因此LINQtoXML或内存中的XmlDocument不是选项)。但是,这些IDisposable没有实现Microsoft推荐的复杂模式,具有Destructor/Finalizer、单独的Dispose(bool)方法和GC.SuppressFinalize()。Dispos
给定一个包含xlsx文件的流对象,我想将它保存为一个临时文件,并在不再使用该文件时将其删除。我想创建一个实现IDisposable的class并将其与using代码块一起使用,以便删除临时文件结束。知道如何将流保存到临时文件并在使用结束时将其删除吗?谢谢 最佳答案 您可以使用TempFileCollection类:using(vartempFiles=newTempFileCollection()){stringfile=tempFiles.AddExtension("xlsx");//dosomethingwiththefileh
我在后面的WPF代码中有一个成员是一次性的(意味着它实现了IDisposable接口(interface))我没有看到任何可以从WPF中的UserControl覆盖的Dispose方法,因此我可以在我的wpf用户控件中处理该成员在WPF用户控件中处理成员的正确方法是什么?它是一个用户控件,它包装了一个实现IDisposable接口(interface)的私有(private)成员。因此,我需要在某处处理该成员。在传统的winform中,用户控件有一个可以覆盖的Dispose方法,因此在覆盖中我可以处理私有(private)成员。但是在WPFusercontrol中,没有这个东西。所以我
是否有通过一次性资源产生yield的适当方法?返回的对象是IDisposable,但它迭代的元素是。这是一个例子:publicstaticIEnumerableFetch(IEnumerableids){using(varclient=newCouchbaseClient()){yieldreturnids.Select(s=>s.ToString());}}现在,调用此方法不会处置获得的using资源。我知道我可以只返回一个ToList并一次全部返回,但是有没有办法“正确地”处理这个问题,或者我是否必须在IDisposable资源上保留一个选项卡并在完成后手动处理它?
场景:应用程序实例化实现了IDisposable的类的单个实例。该实例通过静态成员公开,使其可供应用程序的所有部分访问。单个实例需要在应用程序的生命周期内保持事件状态。问题在应用程序关闭和进程终止之前调用Dispose方法有多重要?我一直认为在大多数像这样的场景中,没有必要调用Dispose,因为进程的终止自然会清理资源。我错了吗? 最佳答案 如果“您的应用程序关闭”是指进程正在终止,那么您技术上不需要做任何事情。您的进程正在终止,操作系统将释放这些资源。我想它们可能是一些模糊的极端情况,其中某些组件可能会创建某种类型的文件或其他资
这个问题在这里已经有了答案:yieldreturnstatementinsideausing(){}blockDisposesbeforeexecuting(2个答案)关闭8年前。我无法理解为什么Program.Fetch1和Program.Fetch2不会产生完全相同的执行顺序。唯一的区别是Program.Fetch1正在调用Program.Fetch来执行实际的提取操作。classProgram{staticIEnumerableFetch1(){using(Contextc=newContext()){returnFetch(c);}}staticIEnumerableFetch
我有一个实体类,它是从我的数据库模型自动生成的。该类继承了ObjectContext,后者又继承了IDisposable。我创建了一个存储库,其中包含各种方法,这些方法使用实体对象的单个实例与数据库进行交互。自动生成类publicpartialclassDevEntities:ObjectContext{publicconststringConnectionString="name=DevEntities";publicconststringContainerName="DevEntities";存储库类DevEntitiesdb=newDevEntities();publicCust
我有一个使用文件流的类。它需要在应用程序关闭时关闭流,所以我让类实现IDisposable。那个类是另一个类的成员,另一个类是另一个类的成员等等。一直到我的主应用程序。因此,我是否必须在所有这些类上实现IDisposable?如果我将来更改我的文件实现以便它在每次写入后关闭文件怎么办?我现在有一整套无缘无故实现IDisposable的类。我想我对将IDisposable语义pry入不需要它们的类中感到不舒服,除了链下的一些轻微实现细节之外。有什么解决办法吗? 最佳答案 通常,如果您的类型包含实现了IDisposable的成员,则该类