2010-04-09 3 views
1

Я использую новый .NET 3.5 System.DirectoryServices.AccountManagement API.AccountManagement.UserPrincipal.Current занимает 5 секунд

В моем коде мне нужно определить текущий System.DirectoryServices.AccountManagement.UserPrincipal.

Мой наивный подход должен был сделать это:

using AccountManagement = System.DirectoryServices.AccountManagement; 

... 

// Determine current UserPrincipal. 
// (On my machine, this blocks for 5 seconds) 
// 

AccountManagement.UserPrincipal principal = AccountManagement.UserPrincipal.Current; 

Мой компьютер автономный компьютер под управлением Vista. Я не являюсь частью какого-либо домена и т. Д.

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

ответ

4

Я предполагаю, что поскольку DirectoryServices ориентирован на поиск данных в каталоге, в данном случае Active Directory, и вы находитесь на одной машине, время истекает с запросом на поиск контроллера домена.

Предполагается, что вы хотите получить имя текущего пользователя, и вы можете сделать это, используя вместо этого старый метод System.Security.Principal.WindowsIdentity.GetCurrent().

Если вам нужен основной для этого пользователя, вы можете использовать этот код:

WindowsIdentity ident = WindowsIdentity.GetCurrent(); 
IPrincipal principal = new WindowsPrincipal(ident); 
+0

мне нужно знать текущий AccountManagement.Principal, так что я могу использовать его, чтобы вызывать другие методы API .NET AccountManagement. К сожалению, решение, основанное на WindowsIdentity, представляет собой совершенно другую объектную модель, которая не может использоваться в контексте API управления учетными записями. –

Смежные вопросы