Подтвердить что ты не робот

Почему использование PrincipalSearcher будет быстрее, чем FindByIdentity()?

У меня был этот код:

var context = new PrincipalContext( ContextType.Machine );
var user = UserPrincipal.FindByIdentity( context, username );

и потребовалось около 2-3 секунд для запуска. Мне было рекомендовано переписать его с помощью класса PrincipalSearcher:

var context = new PrincipalContext( ContextType.Machine );
var user = new UserPrincipal(context);
user.SamAccountName = username;
var searcher = new PrincipalSearcher(user);
user = searcher.FindOne() as UserPrincipal;

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

Почему это делает разницу в производительности?

4b9b3361

Ответ 1

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

Вы можете сделать это, указав атрибут вы ищете (с помощью этого метода перегрузки) - попробуйте это для сравнения:

var user = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, username);

Как быстро это?