jjzjj

idisposable

全部标签

c# - 为什么 Thread 不实现 IDisposable?

我注意到System.Threading.Thread实现了终结器而不是IDisposable。推荐的做法是在实现终结器时始终实现IDisposable。杰弗里·里希特wrote该准则“非常重要,应始终无一异常(exception)地遵守”。那么为什么Thread不实现IDisposable?看起来实现IDisposable将是一个不间断的更改,它将允许确定性地清理Thread的可终结资源。还有一个相关的问题:由于线程是可终结的,我是否必须保留对正在运行的线程的引用以防止它们在执行期间被终结? 最佳答案 处理Thread对象会做什么

c# - 为什么在 DataContract 上调用 Dispose,即使服务仍然引用它?

我定义了以下DataContract实现了IDisposable:[DataContract]publicclassRegularFileMetadata:FileMetadataBase,IDisposable{bool_Disposed=false;//notethis!//...protectedvirtualvoidDispose(booldisposing){if(!_Disposed){//..._Disposed=true;//notethistoo!}}publicvoidDispose(){Dispose(true);GC.SuppressFinalize(this)

c# - 如何正确实现 IDisposable

作为一名开发人员,我见过太多C#代码试图通过将变量设置为null或在他们自己的类Dispose()方法中调用类(例如DataSet)上的Dispose()来帮助GC我一直想知道是否需要在托管环境中实现它。这段代码在其设计模式中是否浪费时间?classMyClass:IDisposable{#regionIDisposableMemberspublicvoidDispose(){otherVariable=null;if(dataSet!=null){dataSet.Dispose();}}#endregion} 最佳答案 GC不会调

c# - Autofac:如何在不绕过 IoC 容器的情况下限制 IDisposable 对象的生命周期

我目前正在学习如何使用Autofac,而且我一直坚持处理IDisposable对象确定性。在我陈述我的问题之前,让我先介绍一下情况。起始位置:假设我的对象模型是通过以下接口(interface)定义的:interfaceIApple:IDisposable{voidConsume();}interfaceIHorse{voidEat(IAppleapple);//issupposedtocallapple.Consume()}interfaceIHorseKeeper{voidFeedHorse();//issupposedtocallhorse.Eat(apple)//where'h

c# - 为什么处理 StreamReader 会使流不可读?

这个问题在这里已经有了答案:CanyoukeepaStreamReaderfromdisposingtheunderlyingstream?(9个回答)关闭7年前。我需要从头到尾读取流两次。但是下面的代码抛出一个ObjectDisposedException:Cannotaccessaclosedfile异常。stringfileToReadPath=@"";using(FileStreamfs=newFileStream(fileToReadPath,FileMode.Open)){using(StreamReaderreader=newStreamReader(fs)){strin

c# - 在我的项目中仅针对 Owned<T> 引用 Autofac 是不是糟糕的设计?

我最近成为Autofac的OwnedInstances功能的重度用户。例如,我用它来提供一个工厂来为我的数据库创建一个工作单元,这意味着我依赖于UnitOfWork工厂的类正在请求以下类型的对象:Func>这非常有用——非常适合keepingIDisposableoutofmyinterfaces--但它是有代价的:因为Owned是Autofac程序集的一部分,我必须在我的每个知道Owned的项目中引用Autofac,并在每个代码中加入“usingAutofac.Features.OwnedInstances”文件。Func具有构建到.NET框架中的巨大好处,因此我毫不怀疑将Func用

c# - 返回用于在 using C# 中使用的变量

我在using语句中返回我在using语句中创建的变量(听起来很有趣):publicDataTablefoo(){using(DataTableproperties=newDataTable()){//dosomethingreturnproperties;}}这会Dispose属性变量吗??这样做之后我仍然收到这个警告:Warning34CA2000:Microsoft.Reliability:Inmethod'test.test',callSystem.IDisposable.Disposeonobject'properties'beforeallreferencestoitare

c# - 重用 SqlConnection 的最佳实践

我有Java经验,正尝试从C#入手。我读过SqlConnectionSqlCommandSqlDataReaderIDisposable我可以理解,连接到数据库的最佳做法是将SqlConnection、SqlCommand和SqlDataReader包装在它们自己的usingblock。但在Java中,我们使用将连接封装到工厂方法中,只创建一次,然后将其重新用于所有查询,甚至是多线程查询。仅为每个查询创建语句和结果集并尽快关闭。为每个查询创建一个新的SqlConnection是不是有点矫枉过正?不能重复使用吗? 最佳答案 创建类Sq

c# - 清除 Crystal Reports ReportDocument 对象使用的资源的最佳方法是什么?

我正在开发一个使用CrystalReports进行报告的应用程序。它在ReportDocument对象中打开给定的报表,执行它需要执行的操作,然后关闭报表。using(varreport=OpenReport(reportSourceInfo)){//Dostuffwiththereportreport.Close();}OpenReport方法对源文件进行一些验证并返回一个打开的ReportDocument对象。测试表明此代码可以完成预期的工作,而且看起来没有任何问题。我真正听取建议的问题是,当我对报告项目进行代码分析(CA)构建时,我收到以下CA消息:CA2202:Microsof

c# - 为什么 Enumerable.Range 实现 IDisposable?

只是想知道为什么Enumerable.Range工具IDisposable.我明白为什么IEnumerator确实如此,但是IEnumerable不需要它。(我在玩我的.Memoise()实现时发现了这一点,它有类似的语句if(enumerableisIDisposable)((IDisposable)enumerable).Dispose();出于好奇,我在它的“sourcefinished”方法中放置了一个断点,并由测试触发。) 最佳答案 Enumerable.Range在其方法主体中使用yieldreturn。yieldret