Я использую 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 до этого вызова. В конце концов, звонок работает, но эта задержка слишком длинная. Что я делаю не так?