idisposable相关内容
C# 2008 我已经为此工作了一段时间,但我仍然对在代码中使用 finalize 和 dispose 方法感到困惑.我的问题如下: 我知道在处理非托管资源时我们只需要一个终结器.但是,如果有托管资源调用非托管资源,是否还需要实现终结器? 但是,如果我开发一个不直接或间接使用任何非托管资源的类,我是否应该实现 IDisposable 以允许该类的客户端使用“使用陈述'? 实
..
注意这不是关于如何在 C# 中实现或模拟鸭子类型的问题... 多年来,我的印象是某些 C# 语言特性依赖于语言本身定义的数据结构(在我看来,这总是一种奇怪的鸡与蛋的场景).例如,我的印象是 foreach 循环只能用于实现 IEnumerable 的类型. 从那以后我开始明白 C# 编译器使用鸭子类型来确定一个对象是否可以在 foreach 循环中使用,寻找 GetEnumerator
..
据我所知,如果你有一个类 A 有一个成员 m 是 IDisposable,A 应该实现 IDisposable 并且它应该在其中调用 m.Dispose() 是一个公认的规则. 我找不到令人满意的理由. 我理解如果你有非托管资源,你应该提供一个终结器以及 IDisposable 的规则,这样如果用户没有显式调用 Dispose,终结器仍然会在 GC 期间清理. 但是,有了该规则,
..
在 ASP.NET 中,如果项目留在会话状态中,实现 IDisposable 但在会话到期时从未被应用程序专门删除和处置,将对 Dipose() 中的任何代码将执行的对象调用 Dispose? 解决方案 如果 IDisposable 模式是 正确实现,然后是的(即类的析构函数将负责处理对象).我不相信 ASP.NET 会话管理器对在实现 IDisposable 的类上显式调用 Dispos
..
我尝试在 VisualStudio 2012 中使用 Run Code Analysis 选项,结果我收到了警告 CA1001 拥有一次性字段的类型应该是一次性的在“DBConnectivity"上实现 IDisposable因为它创建了以下 IDisposable 类型的成员:“SqlConnection"、“SqlCommand". 我在 SO 中提到了一些问题,但我无法理解关于 IDis
..
从这些简单的类开始... 假设我有这样一组简单的类: 类总线{驱动程序 busDriver = new Driver();}类驱动程序{鞋 [] 鞋 = { 新鞋(),新鞋() };}类鞋{鞋带花边 = 新鞋带();}类鞋带{布尔绑定=假;} 一个Bus有一个Driver,Driver有两个Shoe,每个Shoe 有一个 鞋带.都非常傻. 将 IDisposable 对象添加到鞋带
..
我最近和一位同事讨论了 Dispose 的值和实现 IDisposable 的类型. 我认为为应该尽快清理的类型实现 IDisposable 是有价值的,即使没有要清理的非托管资源. 我的同事想法不同;如果您没有任何非托管资源,则无需实施 IDisposable,因为您的类型最终会被垃圾回收. 我的论点是,如果您有一个想要尽快关闭的 ADO.NET 连接,那么实现 IDispos
..
我有以下代码: public void Dispose(){if (_instance != null){_instance = null;//调用 GC.SupressFinalize 使这个对象脱离终结//排队并阻止该对象的终结代码//执行第二次.GC.SuppressFinalize(this);}} 虽然有一条注释解释了与 GC 相关的调用的目的,但我仍然不明白为什么会出现. 当
..
基于文档(MSDN:链接),很明显,在实现终结器时应该使用 IDisposable 模式. 但是,如果您实现了 IDisposable(以便提供一种确定性的对象处置方式),并且您没有任何非托管资源需要清理,您是否需要实现终结器? 在我看来,如果该类只有托管资源并且您不调用 Dispose,则托管资源将自动被 GC 清理,因此无需实现终结器.我错了吗? 另外,如果我使用我的 Dis
..
所以,我有一个从 WCF 服务公开的方法: public GetAllCommentsResponse GetAllComments(GetAllCommentsRequest request){var response = new GetAllCommentsResponse();使用(_unitOfWork)尝试{Guard.ArgNotNull(request, "request");va
..
如果 .NET 有垃圾回收功能,那为什么还要显式调用 IDisposable? 解决方案 垃圾回收是为了内存.您需要处理非内存资源 - 文件句柄、套接字、GDI+ 句柄、数据库连接等.这通常是 IDisposable 类型的基础,尽管实际的句柄可能在链中很长的参考资料.例如,您可以 Dispose 一个 XmlWriter 来处理它所引用的 StreamWriter,它会处理 FileSt
..
在.NET中,什么情况下应该使用GC.SuppressFinalize()? 使用这种方法有什么好处? 解决方案 SuppressFinalize 只能由具有终结器的类调用.它通知垃圾收集器 (GC) this 对象已被完全清理. 当你有终结器时推荐的 IDisposable 模式是: 公共类 MyClass : IDisposable{私人布尔处置=假;protected
..
考虑以下代码: 命名空间 DisposeTest{使用系统;课堂节目{静态无效主要(字符串 [] 参数){Console.WriteLine("调用测试");测试();Console.WriteLine("调用测试完成");}静态无效测试(){DisposeImplementation di = new DisposeImplementation();}}内部类 DisposeImplement
..
我正在开发一个使用 Crystal Reports 进行报告的应用程序.它在 ReportDocument 对象中打开给定的报表,执行它需要执行的操作,然后关闭报表. 使用 (var report = OpenReport(reportSourceInfo)){//对报告做一些事情报告.关闭();} OpenReport 方法对源文件进行一些验证并返回一个打开的 ReportDocument
..
我有一个将 FileStream 作为输入的方法.此方法在 for 循环内运行. private void UploadFile(FileStream fileStream){var stream = GetFileStream();//用流做事} 我有另一种方法可以创建并返回 FileStream: 私有 FileStream GetFileStream(){using(FileStrea
..
我正在使用 System.Net.Http.HttpClient 进行一些客户端 HTTP 通信.我把所有的 HTTP 放在一个地方,从其余的代码中抽象出来.在一个实例中,我想将响应内容作为流读取,但流的使用者与 HTTP 通信发生的位置和流打开的位置完全隔离.在负责 HTTP 通信的地方,我处理了所有 HttpClient 的东西. 此单元测试将在 Assert.IsTrue(stream
..
Stream、StreamReader、StreamWriter 等类实现了IDisposable 接口.这意味着,我们可以对这些类的对象调用 Dispose() 方法.他们还定义了一个名为 Close() 的 public 方法.现在这让我很困惑,一旦我完成了对象,我应该调用什么?如果我同时调用两者呢? 我当前的代码是这样的: using (Stream responseStream =
..
我正在对我的一个较大的 MVC 应用程序进行大规模重构/速度调整.它已经部署到生产中几个月了,我开始在连接池中等待连接超时.我已将问题追溯到未正确处理的连接. 有鉴于此,我已经对我的基本控制器进行了更改: 公共类 MyBaseController : 控制器{私有配置管理器配置管理器;//管理数据上下文.公共 MyBaseController(){configManager = new C
..
我有几个处理 DB 的方法,它们都是从调用开始的 FaierDbDataContext db = new FaierDbDataContext(); 既然Linq2Sql DataContext 对象实现了IDisposable,那么这个应该和“using"一起使用吗? using (FaierDbDataContext db = new FaierDbDataContext()) {//这
..
如果您遇到过类似这样的带有嵌套 using 语句/资源的 C# 代码: using (var response = (HttpWebResponse)request.GetResponse()){使用 (var responseStream = response.GetResponseStream()){使用 (var reader = new BinaryReader(responseStre
..