DirectoryEntry.Children and Dispose
Я не уверен, как освободить объект DirectoryEntry, когда я работал с его детьми. Нужно ли освободить всех детей, а затем освободить родителя или просто освободить родителя?
Например,
using(DirectoryEntry entry = new DirectoryEntry())
{
foreach (DirectoryEntry childEntry in entry.Children)
{
....
}
}
Это достаточно?
Или нужен дополнительный код, такой как
using(DirectoryEntry entry = new DirectoryEntry())
{
foreach (DirectoryEntry childEntry in entry.Children)
{
using(childEntry)
{
...
}
}
}
?
1 ответ
Решение
Вы должны освободить каждого перечисленного ребенка.
Кроме того, вы должны отметить, что DirectoryEntry.Children
возвращает вновь созданный объект каждый раз, когда вы получаете доступ к его получателю. Это отвратительно, потому что это грубое нарушение собственных рекомендаций MS (DirectoryEntry.Children
должен быть метод), но это правда.
Так:
- каждый раз, когда вы перечисляете детей, вы получаете новые экземпляры;
- родительская запись ничего не знает о созданных экземплярах перечислителя и дочерних записях, созданных перечислителем.