Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / DirectoryServices.DirectorySearcher / 18 сообщений из 18, страница 1 из 1
09.01.2013, 08:18
    #38102811
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DirectoryServices.DirectorySearcher
При запросе в котором будет обрабатываться больше 1000 записей, компьютер ловит довольно не кислый лаг, то есть время выполнения запроса довольно продолжительное.
PageSize = 10000
Filter = "(&(objectCategory=Person)(objectClass=User))"

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

заранее спасибо
...
Рейтинг: 0 / 0
09.01.2013, 08:36
    #38102825
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DirectoryServices.DirectorySearcher
SizeLimit и Person убери.

http://codearticles.ru/Home/ArticleView/524
...
Рейтинг: 0 / 0
09.01.2013, 08:37
    #38102826
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DirectoryServices.DirectorySearcher
Ну и принципал контекст поюзай в альтернативу
http://codearticles.ru/Home/Catalogs/142
...
Рейтинг: 0 / 0
09.01.2013, 08:57
    #38102842
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DirectoryServices.DirectorySearcher
МСУ,

Person нельзя убрать, в AD компьютер "наследует" класс User, так что если сделать запрос только по User он вернет компы, пользователей и еще может кого то , кто "наследует" этот класс.

SizeLimit ускорит только если указать его минимальным, но тогда не все данные будут загружены, зачем мне это =) мне все надо

c PageSize не всё однозначно. По умолчанию стоит 1000.
То есть 1000 пользователей будут отобраны в каталоге и возвращены программы, как только я запрашиваю 1001, загружается еще 1 тысяча.
Ставлю значение 10 и скорость выполнения очень быстрая, если поставить 1 скорость падает, потому что приходится всё время обращаться к серверу... При 1000 запросы слишком длительные =(
...
Рейтинг: 0 / 0
09.01.2013, 08:58
    #38102843
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DirectoryServices.DirectorySearcher
Roman Mejtes,

еще кстати PropertyLoad довольно не плохо помогло
...
Рейтинг: 0 / 0
09.01.2013, 09:19
    #38102855
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DirectoryServices.DirectorySearcher
Вообще, задача не совсем правильная. Зачем нужно сливать весь домен? Достаточно запросить данные по фильтру.
...
Рейтинг: 0 / 0
09.01.2013, 10:05
    #38102898
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DirectoryServices.DirectorySearcher
МСУ,

Я понимаю, но мне нужны именно все пользователи к сожалению, долго рассказывать, зачем :) но теперь всё супер и работает быстро, с помощью Аналайзера посмотрел где что тупило. Как оказалось, это очень прикольная штука :) и почему я ей раньше ни когда не пользовался ) нашел в соседней теме совет, по другой какой то проблеме
...
Рейтинг: 0 / 0
09.01.2013, 10:15
    #38102915
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DirectoryServices.DirectorySearcher
Roman MejtesМСУ, Я понимаю, но мне нужны именно все пользователи к сожалению, долго рассказывать, зачем :)
Ну начинается... долго ему рассказывать, ага, трактат на 50 листов A4 :)

Roman Mejtesно теперь всё супер и работает быстро
Быстро это сколько, не 5 минут, а 1 минута? :)
...
Рейтинг: 0 / 0
09.01.2013, 10:22
    #38102928
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DirectoryServices.DirectorySearcher
МСУ,
2500 записей за 2 секунды на глаз
...
Рейтинг: 0 / 0
09.01.2013, 10:22
    #38102932
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DirectoryServices.DirectorySearcher
Roman MejtesМСУ,
2500 записей за 2 секунды на глаз
Код в студию!
...
Рейтинг: 0 / 0
09.01.2013, 10:25
    #38102939
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DirectoryServices.DirectorySearcher
МСУ, в C# или в VB.NET?
...
Рейтинг: 0 / 0
09.01.2013, 10:38
    #38102964
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DirectoryServices.DirectorySearcher
Roman MejtesМСУ, в C# или в VB.NET?
C#
...
Рейтинг: 0 / 0
09.01.2013, 11:55
    #38103104
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DirectoryServices.DirectorySearcher
Все данные выводятся в консоль
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            List<cUser> list;
            DateTime t = DateTime.Now;
            list = testProc();
            Console.Write("Результат: {0}", (DateTime.Now - t).TotalMilliseconds);
            Console.ReadKey();
            foreach (cUser i in list) { Console.Write("".PadLeft(80, '-')); Console.WriteLine(i.ToString()); }
            Console.ReadKey();
        }

        static List<cUser> testProc(string filter = "(&(objectCategory=Person)(objectClass=User))")
        {

            List<cUser> list = new List<cUser>();
            DirectoryEntry root = new DirectoryEntry();
            DirectorySearcher searcher = new DirectorySearcher(root, filter);
            searcher.Asynchronous = false;
            searcher.SizeLimit = 10000;
            searcher.PageSize = 50;
            searcher.CacheResults = true;
            SearchResultCollection result = searcher.FindAll();
            searcher.PropertiesToLoad.AddRange(new string[] { "createTimeStamp", "cn", "homePhone", "mail", "mobile", "samaccountname", "displayname", "telephoneNumber", "title", "UserAccountControl", "objectGUID", "employeeID", "lastLogonTimeStamp" });
            try
            {
                result = searcher.FindAll();
                foreach (SearchResult entry in result)
                {
                    cUser item = new cUser(entry);
                    list.Add(item);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            return list;

        }
        public class cUser
        {
            private string _valueStr;
            public cUser(SearchResult data)
            {
                
                foreach (string i in new string[] { "cn", "samaccountname", "displayname", "telephoneNumber", "title", "UserAccountControl", "objectGUID", "employeeID", "lastLogonTimeStamp" })
                {
                    _valueStr += string.Format("{0}:={1}\n", i, data.Properties.Contains(i) ? data.Properties[i][0].ToString(): "null");
                }
            }
            public override string ToString()
            {
                return _valueStr;
            }
        }
    }


2500 ms
...
Рейтинг: 0 / 0
09.01.2013, 11:57
    #38103111
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DirectoryServices.DirectorySearcher
Roman Mejtes,
в реальных условиях кстати работают 2 потока, 1 загружается пользователей, второй компьютеры
...
Рейтинг: 0 / 0
09.01.2013, 12:15
    #38103150
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DirectoryServices.DirectorySearcher
УГ. Не дождался ответа от AD...
...
Рейтинг: 0 / 0
09.01.2013, 12:22
    #38103167
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DirectoryServices.DirectorySearcher
МСУ,

у вас контроллер то работает? :) я не указывал имя домена явно, можете попробовать с авторизацией
...
Рейтинг: 0 / 0
09.01.2013, 12:46
    #38103216
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DirectoryServices.DirectorySearcher
Roman MejtesМСУ, у вас контроллер то работает? :)
Ты издеваешься? :)

Roman Mejtesя не указывал имя домена явно, можете попробовать с авторизацией
Без разницы.
...
Рейтинг: 0 / 0
09.01.2013, 17:21
    #38103822
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DirectoryServices.DirectorySearcher
Roman Mejtes, зацени - на Parallel Library: http://codearticles.ru/Home/ArticleView/524

Лупит тока в путь, у меня на ~12 тыщ. юзерах + контроллер домена питерский, за 9 секунд отработал. С тебя пиво
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / DirectoryServices.DirectorySearcher / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]