LookupAccountSid занимает +600 мс за звонок - PullRequest
2 голосов
/ 30 августа 2010

Я использую GetTokenInformation с флагами TokenGroups для извлечения всех групп, частью которых является определенный токен. Затем я перебираю каждый из возвращенных идентификаторов безопасности и использую LookupAccountSid, чтобы получить имя пользователя и домен. Я дважды вызываю LookupAccountSid: первый раз, чтобы получить размер массива имени и имени домена, а второй раз заполняет выделенные StringBuilder с

У меня очень большие задержки. Я запустил ANTS, чтобы увидеть, в чем проблема, и обнаружил, что, если пользователь входит в 23 группы, вся эта последовательность займет 15 секунд! Профилировщик указывает на первый вызов LookupAccountSid и заявляет, что он в среднем составлял 652 мс на вызов.

Вот как выглядит звонок:

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

accountCount и domainCount инициализируются до 0 до этого вызова. В конце концов, звонок работает, но эта задержка слишком длинная. Что я делаю не так?

1 Ответ

3 голосов
/ 30 августа 2010

Невозможно точно измерить время, затраченное на запуск профилировщика.

Это полезно только по сравнению со всеми временами других методов.

Выполнить вызов с использованием секундомера в качестве таймерабез отладочной информации / присоединения отладчика и включенных оптимизаций.

Редактировать:

У меня есть код, который работает примерно в 100 раз дольше, когда подключен профилировщик (10 секунд) против приложения NGEN'd (0,1 секунды).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...