在MSDN文档中找不到任何关于此的内容.
也就是这样做,说:
using(PrincipalSearcher searcher = ...)
{
foreach (var principal in searcher.FindAll())
{
... do something ...
} // The PrincipalSearchResult<T> returned by searcher.FindAll is disposed here
}
Run Code Online (Sandbox Code Playgroud)
这是我见过的大多数例子,或者我应该这样做:
using(PrincipalSearcher searcher = ...)
{
foreach(var principal in searcher.FindAll())
{
using (principal)
{
// ... do something ...
}
}
}
Run Code Online (Sandbox Code Playgroud)
后者(在迭代期间明确地处理每个项目)看起来"更安全" - 即符合指南以明确处理所有IDisposable对象 - 但它有点凌乱; 例如,它排除了使用LINQ迭代搜索结果.
回应@Rup的评论:
你可以编写一个从父迭代器返回一个结果的yield迭代器
是的,我认为这样可以启用LINQ.像下面的扩展方法:
public static IEnumerable<T> EnumerateAndDispose<T>(this IEnumerable<T> collection) where T : IDisposable
{
foreach (T item in collection)
{
using (item)
{
yield …Run Code Online (Sandbox Code Playgroud) 如果不使用using语句,是否会导致IDisposable内存泄漏?
如果是这样,如果代码不多,有人可以提供一个内存泄漏示例吗?