2015-06-24 2 views
0

Я использую функцию getgroup() для чтения всех групп пользователей в активном каталоге.getgroup() очень медленный

Я не уверен, что я делаю что-то неправильно, но это очень медленно. Каждый раз, когда он достигает этой точки, требуется несколько секунд. Я также обращаюсь к остальной директории Active, используя интегрированную функцию «Accountmanagement», и она выполняется мгновенно.

Вот код:

For y As Integer = 0 To AccountCount - 1 
    Dim UserGroupArray As PrincipalSearchResult(Of Principal) = UserResult(y).GetGroups() 

    UserInfoGroup(y) = New String(UserGroupArray.Count - 1) {} 

    For i As Integer = 0 To UserGroupArray.Count - 1 
     UserInfoGroup(y)(i) = UserGroupArray(i).ToString() 
    Next 
Next 

Позже ...:

AccountChecker_Listview.Groups.Add(New ListViewGroup(Items(y, 0), HorizontalAlignment.Left)) 
For i As Integer = 0 To UserInfoGroup(y).Count - 1 
    AccountChecker_Listview.Items.Add(UserInfoGroup(y)(i)).Group = AccountChecker_Listview.Groups(y) 
Next 

Item() содержит мои нормальные данные Active Directory, что я медийный (у, 0) содержит имя пользователя ,

y - количество учетных записей пользователей в AD. У меня также есть другой код для другой информации в этом цикле, но это не проблема.

Кто-нибудь знает, как сделать это быстрее или если есть другое решение?

ответ

1

Я бы рекомендовал попытаться выяснить, где потрачено время. Один из вариантов - использовать профилировщик, либо встроенный в Visual Studio, либо сторонний профилировщик, например Redgate's Ants Profiler, или Yourkit .Net Profiler.

Другим является отслеживание времени, проведенного с использованием System.Diagnostics.Stopwatch class, и использование результатов для оптимизации ваших усилий по оптимизации. Например, функция времени, которая извлекает данные из Active Directory и отдельно от функции, которая заполняет представление, чтобы сузить область узкого места.

Если узкое место находится в поиске Active Directory, вы можете захотеть запустить операцию асинхронно, чтобы окно не блокировалось и не заполнялось при получении новых данных. Если это в списке, вы можете рассмотреть, например, вставку данных в пакетную операцию.