2010-08-30 2 views
2

J'utilise GetTokenInformation avec les indicateurs TokenGroups pour récupérer tous les groupes dont un jeton particulier fait partie. Je suis ensuite en boucle à travers chacun des SID retournés et en utilisant LookupAccountSid pour récupérer le nom d'utilisateur et le domaine. J'appelle deux fois: LookupAccountSid: la première fois pour saisir la taille du nom et les tableaux de caractères du domaine et la seconde fois remplit StringBuilder s.LookupAccountSid prenant +600 ms par appel

Je reçois des délais très longs. J'ai couru ANTS pour voir quel était le problème et j'ai trouvé que si un utilisateur faisait partie de 23 groupes, la séquence entière prendrait 15 secondes! Le profileur pointe vers le premier appel de LookupAccountSid et indique qu'il faisait en moyenne 652 ms par appel.

C'est ce que l'appel ressemble à:

  LookupAccountSid(null, tokenGroups.Groups[i].SID, null, ref accountCount, null, 
          ref domainCount, out snu); 

accountCount et domainCount sont initialisés à 0 avant cet appel. À la fin, l'appel fonctionne, mais ce délai est long. Qu'est-ce que je fais mal?

+0

Les retards de réseau parlant au contrôleur de domaine, ou le CC lui-même, serait ma conjecture. –

Répondre

3

Il est impossible de mesurer avec précision le temps pris lors de l'exécution d'un profileur.

Ce n'est utile que par rapport à toutes les autres méthodes.

Exécutez l'appel à l'aide de Chronomètre en tant que temporisateur sans informations de débogage/attachement d'un débogueur et optimisations activées.

Edit:

je code qui exécute environ 100 fois plus quand un profileur est fixé (10 secondes) vs app NGEN'd (0,1 seconde).

+0

Merci. Ça ira. –

+1

Ouf. Le problème a été corrigé par quelque chose d'autre et j'ai pensé, parce que le profileur ralentissait, que le bug rampait encore. L'exécution prend maintenant environ 1-2 ms! Merci de m'avoir aidé avec mon ignorance. :) –

Questions connexes