Je travaille sur une application de gestion de répertoire active. En plus de créer un nouvel utilisateur, d'activer/désactiver un compte, de réinitialiser mon mot de passe, etc., il gère également les autorisations d'application pour toutes les applications Web des clients. La gestion des applications est gérée par des milliers de groupes AD, tels que des codes à 3 lettres pour l'application, la section et le site. Il existe également des centaines de groupes AD qui déterminent les applications et les emplacements auxquels un coordinateur peut accorder des droits. Tous ces groupes appartiennent à d'autres groupes donc je filtre généralement la liste des groupes avec la propriété MemberOf pour trouver les groupes auxquels un utilisateur appartient directement (ou tout le monde a le droit de tout faire). J'ai largement utilisé l'espace de noms System.DirectoryServices.AccountManagment à l'aide de la méthode FindByIdentity à 31 endroits dans l'application. Cette méthode appelle une méthode privée FindPrincipalByIdentRefHelper sur la classe interne ADStoreCtx. Une SearchResultCollection est créée mais n'est pas éliminée, donc généralement une ou deux fois par jour le serveur web manque de mémoire et toutes les applications sur le serveur web cessent de répondre jusqu'à ce que iis soit réinitialisé car les ressources utilisées par les objets com ne sont jamais relâchées .FindByIdentity dans System.DirectoryServices.AccountManagment Problèmes de mémoire
Il y a des endroits où je retombe aux objets d'annuaire sous-jacents, mais il y a beaucoup d'endroits où j'emploie les propriétés sur le Principal - c'est une amélioration énorme au-dessus des noms de propriété d'annonce ésotériques dans le. Code de services d'annuaire.
J'ai contacté Microsoft à propos du problème et il a été corrigé dans .Net 4.0 mais ils n'ont actuellement pas prévu de le réparer dans 3.5 à moins qu'il y ait un intérêt dans la communauté à ce sujet.
Je ne ai trouvé des informations à ce sujet dans quelques endroits
la documentation MDSN dans l'il de l'état de contenu communautaire est une fuite de mémoire au fond (suppose que je devrais avoir lu que avant d'utiliser la méthode)
http://msdn.microsoft.com/en-us/library/bb345628.aspx
et la classe en question est interne et ne pas exposer SearchResultsCollection en dehors de la méthode incriminée, donc je ne peux pas obtenir les résultats pour les éliminer ou hériter de la classe et remplacer la méthode.
Mes questions sont
Quelqu'un at-il rencontré ce problème? Si oui, étiez-vous capable de contourner ce problème?
A part la réécriture de l'application, est-ce que je n'ai pas d'autre option que d'utiliser le code de répertoire actif .Net 3.5?
Merci