使用"使用"实现IDisposable的每个对象的语句?

时间:2015-06-29 11:24:41

标签: active-directory idisposable using-statement

我目前正在浏览一些读取Active Directory条目并对其进行操作的代码。由于我没有这种东西,我 F12 ' d(DirectoryEntrySearchResultCollection,...),我发现他们都实现了IDisposable界面,但我在代码中看不到任何using块。

在这种情况下,那些甚至是必要的(即,我应该盲目地重构它们吗?)

我的另一个问题(代码中有很多实例化的IDisposable个对象:Isn' t IDisposable制作东西非常"丑陋"在这种情况下?我的意思是,我喜欢using语句,因为它们基本上让我不再担心事情,但在很多情况下,代码的布局类似于以下内容:

using (var one = myObject.GetSomeDisposableObject())
using (var two = myObject.GetSomeOtherDisposableObject())
{
  one.DoSomething();
  using (var foo = new DisposableFoo())
  {
    MyMethod(foo);
    using (...)
    using (...)
    {
      ...
    }
  }
}

我觉得由于高缩进级别(甚至堆叠using语句),这变得非常难以理解。但是将其中的一部分提取到新方法中可能会导致需要传递许多参数,因为自然而然的是内部"代码通常需要在using语句中创建的对象。

在不失去可读性的情况下解决这个问题的优雅方法是什么?

1 个答案:

答案 0 :(得分:1)

对于第一部分,this question指的是当不处理AD引用时“任务使用的内存不断增加”

对于第二个,using块是try/finally的语法糖,Dispose块中有finally调用,这将是一个替代构造,允许您在一个地方处理所有东西,减少缩进