2014-12-11 4 views
-1

У меня есть приложение 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 

Любые идеи о том, как я могу повысить производительность?

+0

Почему вы создаете главный контекст каждый раз, конечно, его можно кэшировать? – AwkwardCoder

+2

Я не могу себе представить, что WPF vs. WinForms может иметь к этому какое-то отношение. Должно быть что-то другое, другое. – RenniePet

ответ

0

RenniePet имеет это право; Оказывается, возникла проблема с DNS; Я не уверен, почему это проявилось в WPF и в выигрышных формах.