FindByIdentity - различия в производительности - PullRequest
16 голосов
/ 23 сентября 2011

Следующий код отлично работает с разных машин в нашем домене.

var context = new PrincipalContext(ContextType.Domain);
var principal = UserPrincipal.FindByIdentity(context, @"domain\username")

Однако, если я запускаю этот похожий код на машине, которая не находится в домене, он работает, но строка FindByIdentityзанимает 2+ секунды.

var context = new PrincipalContext(ContextType.Machine);
var principal = UserPrincipal.FindByIdentity(context, @"machinename\username")

Можно ли устранить эту разницу в производительности, предоставив специальные параметры конструктору PrincipalContext и / или методу FindByIdentity?Есть ли в IIS или Windows параметр, который можно настроить?

По крайней мере, кто-нибудь может мне сказать, почему он может работать медленнее во втором сценарии?

Код выполняется из приложения ASP.NET MVC 3, размещенного в IIS 7.5 (Integrated Pipeline) в Windows Server 2008 R2.

1 Ответ

22 голосов
/ 03 февраля 2013

У меня была такая же проблема. Попробуйте приведенный ниже блок кода. Я не знаю почему, но это намного быстрее (игнорируйте первый раз медленный вход в систему после сборки в VS - последующие входы в систему быстрые). См. Аналогичный вопрос SO Почему использование PrincipalSearcher будет быстрее, чем FindByIdentity ()?

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

Основная проблема может быть связана с вызовами netBios. См. ADLDS очень медленный (туда и обратно \ Server * \ MAILSLOT \ NET \ NETLOGON)

...