idisposable-cheat-sheet
全部标签 是否有通过一次性资源产生yield的适当方法?返回的对象是IDisposable,但它迭代的元素是。这是一个例子:publicstaticIEnumerableFetch(IEnumerableids){using(varclient=newCouchbaseClient()){yieldreturnids.Select(s=>s.ToString());}}现在,调用此方法不会处置获得的using资源。我知道我可以只返回一个ToList并一次全部返回,但是有没有办法“正确地”处理这个问题,或者我是否必须在IDisposable资源上保留一个选项卡并在完成后手动处理它?
场景:应用程序实例化实现了IDisposable的类的单个实例。该实例通过静态成员公开,使其可供应用程序的所有部分访问。单个实例需要在应用程序的生命周期内保持事件状态。问题在应用程序关闭和进程终止之前调用Dispose方法有多重要?我一直认为在大多数像这样的场景中,没有必要调用Dispose,因为进程的终止自然会清理资源。我错了吗? 最佳答案 如果“您的应用程序关闭”是指进程正在终止,那么您技术上不需要做任何事情。您的进程正在终止,操作系统将释放这些资源。我想它们可能是一些模糊的极端情况,其中某些组件可能会创建某种类型的文件或其他资
我有一个使用文件流的类。它需要在应用程序关闭时关闭流,所以我让类实现IDisposable。那个类是另一个类的成员,另一个类是另一个类的成员等等。一直到我的主应用程序。因此,我是否必须在所有这些类上实现IDisposable?如果我将来更改我的文件实现以便它在每次写入后关闭文件怎么办?我现在有一整套无缘无故实现IDisposable的类。我想我对将IDisposable语义pry入不需要它们的类中感到不舒服,除了链下的一些轻微实现细节之外。有什么解决办法吗? 最佳答案 通常,如果您的类型包含实现了IDisposable的成员,则该类
我注意到System.Threading.Thread实现了终结器而不是IDisposable。推荐的做法是在实现终结器时始终实现IDisposable。杰弗里·里希特wrote该准则“非常重要,应始终无一异常(exception)地遵守”。那么为什么Thread不实现IDisposable?看起来实现IDisposable将是一个不间断的更改,它将允许确定性地清理Thread的可终结资源。还有一个相关的问题:由于线程是可终结的,我是否必须保留对正在运行的线程的引用以防止它们在执行期间被终结? 最佳答案 处理Thread对象会做什么
作为一名开发人员,我见过太多C#代码试图通过将变量设置为null或在他们自己的类Dispose()方法中调用类(例如DataSet)上的Dispose()来帮助GC我一直想知道是否需要在托管环境中实现它。这段代码在其设计模式中是否浪费时间?classMyClass:IDisposable{#regionIDisposableMemberspublicvoidDispose(){otherVariable=null;if(dataSet!=null){dataSet.Dispose();}}#endregion} 最佳答案 GC不会调
我目前正在学习如何使用Autofac,而且我一直坚持处理IDisposable对象确定性。在我陈述我的问题之前,让我先介绍一下情况。起始位置:假设我的对象模型是通过以下接口(interface)定义的:interfaceIApple:IDisposable{voidConsume();}interfaceIHorse{voidEat(IAppleapple);//issupposedtocallapple.Consume()}interfaceIHorseKeeper{voidFeedHorse();//issupposedtocallhorse.Eat(apple)//where'h
只是想知道为什么Enumerable.Range工具IDisposable.我明白为什么IEnumerator确实如此,但是IEnumerable不需要它。(我在玩我的.Memoise()实现时发现了这一点,它有类似的语句if(enumerableisIDisposable)((IDisposable)enumerable).Dispose();出于好奇,我在它的“sourcefinished”方法中放置了一个断点,并由测试触发。) 最佳答案 Enumerable.Range在其方法主体中使用yieldreturn。yieldret
关于处理非托管资源的“标准完整”IDisposable实现有很多信息-但实际上这种情况(非常)罕见(大多数资源已经被托管类包装).这个问题侧重于针对更常见的“仅限托管资源”情况的IDisposable的最小实现。1:下面代码中IDisposable的最小实现是否正确,是否存在问题?2:是否有任何理由添加完整的标准IDisposable实现(Dispose()、Dispose(bool)、Finalizer等)超过所呈现的最小实现?3:在这种最小情况下,使Dispose虚拟化(因为我们不提供Dispose(bool))是否可行/明智?4:如果这个最小的实现被一个完整的标准实现替换,包括一
我正在尝试模拟一个SqlDataReaderSqlDataReaderreader=mocks.CreateMock();Expect.Call(reader.Read()).Return(true).Repeat.Times(1);Expect.Call(reader.Read()).Return(false);Expect.Call(reader.HasRows).Return(true);Expect.Call(reader.Dispose);Expect.Call(reader["City"]).Return("Boise");Expect.Call(reader["State
我似乎陷入了享元模式的困境。首先,假设我有一个一次性类型DisposableFiddle和一个工厂FiddleFactory:publicinterfaceDisposableFiddle:IDisposable{//ImplementsIDisposable}publicclassFiddleFactory{publicDisposableFiddleCreateFiddle(SomethingThatDifferentiatesFiddless){//returnsanewlycreatedfiddle.}}然后,在我看来,对于FiddleFactory的客户来说,工厂并不声称拥有