我真的需要在每个校长上调用Dispose()吗?

Han*_*ank 7 .net resources dispose iprincipal groupprincipal

我正在使用.NET的System.DirectoryServices.AccountManagement命名空间进行一些Active Directory工作.我注意到这个Principal实现IDisposable,因为该命名空间中的所有东西都继承了,所以会引起一些麻烦Principal.

例如,考虑以下代码来获取组中的所有用户:

PrincipalContext domain = new PrincipalContext(ContextType.Domain);
GroupPrincipal group = GroupPrincipal.FindByIdentity(domain, "MyGroup");
PrincipalSearchResult<Principal> users = group.GetMembers();
Run Code Online (Sandbox Code Playgroud)

该代码段中的每个类型都会实现IDisposable,包括搜索返回的所有用户以及搜索结果集本身.

处理domaingroup物体并不是什么大不了的事(用using()块来容易),但我对每一个结果怎么办?我是否真的必须遍历该users集合并处理每一个?

Pet*_*hie 4

合同IDisposable就是这样,合同。预计将会跟进。如果您没有“需要调用 Dispose”,他们就不会执行合同......

实际上,您无法真正判断特定实例正在使用什么类型的对象Principal 。有时,您确实必须处置它,有时则不需要。除非您了解Principal. 例如,如果 Principle 实例中的底层对象是 a DirectoryEntry,那么您应该处置它。但是,您没有真正的方法可以在运行时判断底层对象是什么。即使可以,直接打电话似乎也更容易Dispose

  • 是的,我知道一切都需要处理掉。我只是觉得我“负责”的事情令人困惑。我通常的假设是,如果我实例化一个对象,我负责清理它,但这显然不适用于这些类。MSDN 文档完全没有帮助:他们的大多数示例根本没有“Dispose()”调用。 (3认同)