2009-08-20 2 views
2

Я работаю над активным приложением управления каталогом. В дополнение к типичному «Создать нового пользователя», «Включить/отключить учетную запись», «Сбросить пароль» и т. Д., Он также управляет разрешениями приложений для всех веб-приложений клиентов. Управление приложениями обрабатывается тысячами AD-групп, которые построены из 3-х буквенных кодов для приложения, раздела и сайта. Существуют также сотни групп AD, которые определяют, какие приложения и местоположения может предоставить координатор. Все эти группы, в свою очередь, относятся к другим группам, поэтому я обычно фильтрую список групп с свойством MemberOf, чтобы найти группы, к которым пользователь непосредственно принадлежит (или у всех есть права делать все). Я широко использовал пространство имен System.DirectoryServices.AccountManagment, используя метод FindByIdentity в 31 месте по всему приложению. Этот метод вызывает частный метод FindPrincipalByIdentRefHelper во внутреннем классе ADStoreCtx. Создается SearchResultCollection, но не удаляется, поэтому, как правило, один или два раза в день на веб-сервере заканчивается память, и все приложения на веб-сервере перестают отвечать на запросы до тех пор, пока iis не будет сброшен, потому что ресурсы, используемые объектами com, никогда не обновляются ,FindByIdentity в System.DirectoryServices.AccountManage Проблемы с памятью

Есть места, где я возвращаюсь к основным объектам каталога, но есть много мест, где я использую свойства Principal - это значительное улучшение по сравнению с использованием имен свойств эзотерического объявления в .Net 2.0 Код службы каталогов.

Я связался с Майкрософт о проблеме, и он был исправлен в .Net 4.0, но в настоящее время у них нет планов исправить его в 3.5, если в сообществе не возникнут проблемы.

я нашел только информацию о нем в нескольких местах

MDSN документация в государстве содержания СООБЩЕСТВА есть утечка памяти в нижней части (предполагаю, что я должен был прочитать, что перед использованием методы)

http://msdn.microsoft.com/en-us/library/bb345628.aspx

а класс вопрос является внутренним и не подвергать SearchResultsCollection вне метода обижая, так что я не могу получить на результаты распоряжаться им или наследовать от класса и переопределить метод.

Так что мои вопросы

Кто-нибудь еще сталкивался с этой проблемой? Если бы вы могли обойти это?

Есть ли у меня возможность помимо перезаписывания приложения, не использующего какой-либо из активных каталогов .Net 3.5?

Благодаря

ответ

0

Я столкнулся с теми же ошибками, и нет, у меня нет обходного пути иного, чем при использовании подхода DirectoryEntry.

0

Оберните свои вызовы каталогу внутри используемого блока, а также оберните итоговый результат внутри блока использования и вызовите .Dispose() в результатах явно. См. Ответ здесь:

Memory Leak when using PrincipalSearcher.FindAll()

Смежные вопросы