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 должен быть метод), но это правда.

Так:

  • каждый раз, когда вы перечисляете детей, вы получаете новые экземпляры;
  • родительская запись ничего не знает о созданных экземплярах перечислителя и дочерних записях, созданных перечислителем.
Другие вопросы по тегам