У меня есть приложение C# WPF, которое я пытаюсь выполнить с помощью Active Directory Server, и я столкнулся с серьезными проблемами производительности в течение 20-30 секунд для запуска funciton. Используя идентичный код, я могу поместить его в приложение Winforms и занимает около 1 секунды или меньше. Поскольку это большой AD, я предполагаю, что он вытаскивает все свойства для конечного пользователя, но я действительно хочу только имя и фамилию человека (для других целей) и обеспечить, чтобы пользователь находился в Active Directory.WPF Active Directory Вызывает проблемы с производительностью
Вот код:
public string DomainUserNameGet(string ActiveDirectoryServer, string WindowsUserID) {
/// queries AD to get logged on user's name
string results = "";
try {
// create your domain context
PrincipalContext oPrincipalContext = new PrincipalContext(
ContextType.Domain
, ActiveDirectoryServer
);
UserPrincipal oUserPrincipal = UserPrincipal.FindByIdentity(
oPrincipalContext
, IdentityType.SamAccountName
, ActiveDirectoryServer + @"\" + WindowsUserID
);
results =
oUserPrincipal.GivenName.ToString()
+ " "
+ oUserPrincipal.Surname.ToString();
} catch { }
return results;
}
Сумасшедшая вещь я могу сделать следующее через командную строку и получить ответ в около 1 вторых:
NET USER /DOMAIN LANID | find "LANID" /c
Любые идеи о том, как я могу повысить производительность?
Почему вы создаете главный контекст каждый раз, конечно, его можно кэшировать? – AwkwardCoder
Я не могу себе представить, что WPF vs. WinForms может иметь к этому какое-то отношение. Должно быть что-то другое, другое. – RenniePet