对每个实现 IDisposable 的对象使用 "using" 语句?
Using "using" statements for every object implementing IDisposable?
我目前正在浏览一些读取 Active Directory 条目并对其进行操作的代码。因为我不必处理这类事情,所以我 F12'd the 类 (DirectoryEntry
, SearchResultCollection
, ... ),我发现它们都实现了 IDisposable
接口,但我在代码中看不到任何 using
块。
在这种情况下这些是否必要(即,我是否应该盲目地重构它们)?
关于这个我的另一个问题(代码中有很多实例化的 IDisposable
对象:在这种情况下 IDisposable
不是很 "ugly" 吗?我的意思是,我喜欢 using
语句,因为它们基本上让我不用担心事情,但在很多情况下,代码的布局类似于以下内容:
using (var one = myObject.GetSomeDisposableObject())
using (var two = myObject.GetSomeOtherDisposableObject())
{
one.DoSomething();
using (var foo = new DisposableFoo())
{
MyMethod(foo);
using (...)
using (...)
{
...
}
}
}
我觉得由于高缩进级别(甚至堆叠 using
语句),这变得很难读。但是将其中一些提取到新方法中可能会导致需要传递许多参数,因为 "inner" 代码通常需要在 using
语句中创建的对象。
在不损失可读性的情况下解决这个问题的优雅方法是什么?
对于第一部分,this question在不处理AD引用的情况下引用'memory used by the task increasing constantly'
对于第二个,using
块是 try/finally
的语法糖,在 finally
块中调用 Dispose
,这将是一个替代结构,允许你把所有东西都放在一个地方,减少缩进
我目前正在浏览一些读取 Active Directory 条目并对其进行操作的代码。因为我不必处理这类事情,所以我 F12'd the 类 (DirectoryEntry
, SearchResultCollection
, ... ),我发现它们都实现了 IDisposable
接口,但我在代码中看不到任何 using
块。
在这种情况下这些是否必要(即,我是否应该盲目地重构它们)?
关于这个我的另一个问题(代码中有很多实例化的 IDisposable
对象:在这种情况下 IDisposable
不是很 "ugly" 吗?我的意思是,我喜欢 using
语句,因为它们基本上让我不用担心事情,但在很多情况下,代码的布局类似于以下内容:
using (var one = myObject.GetSomeDisposableObject())
using (var two = myObject.GetSomeOtherDisposableObject())
{
one.DoSomething();
using (var foo = new DisposableFoo())
{
MyMethod(foo);
using (...)
using (...)
{
...
}
}
}
我觉得由于高缩进级别(甚至堆叠 using
语句),这变得很难读。但是将其中一些提取到新方法中可能会导致需要传递许多参数,因为 "inner" 代码通常需要在 using
语句中创建的对象。
在不损失可读性的情况下解决这个问题的优雅方法是什么?
对于第一部分,this question在不处理AD引用的情况下引用'memory used by the task increasing constantly'
对于第二个,using
块是 try/finally
的语法糖,在 finally
块中调用 Dispose
,这将是一个替代结构,允许你把所有东西都放在一个地方,减少缩进