Какова производительность заполнения и показа очень большого класса клиентов - PullRequest
0 голосов
/ 12 марта 2011

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

Я хочу знать, сколько минут нужно назначить85 свойств для 5000 клиентов, затем добавьте клиентов в список и отобразите их в виде сетки.

РЕДАКТИРОВАТЬ: Вот код:

    private string customerID;
    public string CustomerID
    {
        get { return customerID; }
        set { customerID= value; }
    }
    private int username;
    public int UserName
    {
        get { return username; }
        set { username= value; }
    }
    private string adress;
    public string Adress
    {
        get { return adress; }
        set { adress= value; }
    }

В другом классе я использую while и переключаюзаявление о присвоении этих значений.В операторе while, пока есть клиенты, я использую оператор switch следующим образом:

               switch (customers)
                {
                    case "Customer ID":
                        try
                        {
                            cust.CustomerID = customerid;
                        }
                        catch
                        {
                        }
                        break;
                    case "User Name":
                        try
                        {
                            cust.UserName = username;
                        }
                        catch
                        {
                        }
                        break;
                    case "Adress":
                        try
                        {
                            cust.Adress = adress;
                        }
                        catch ()
                        {

                        }
                        break;

Я назначаю свойства клиента следующим образом.

Ответы [ 2 ]

4 голосов
/ 12 марта 2011

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

1 голос
/ 12 марта 2011

Реальный ответ на ваш вопрос: это зависит.

Я бы выступил против разработки такой системы, вместо этого использовал бы ленивую загрузку и подкачку страниц. Но предположим, что вы это сделаете, мы можем немного подсчитать (изменить цифры на фактические значения):

Особенности памяти

  • 85 свойств должны быть назначены, скажем, с 16 байтами, чем это составляет 1360 байтов
  • Список содержит указатели на каждый элемент, что составляет 1360 + 4 (или 1360 + 8) = 1364 байта
  • 5000 * 1364 = 6820000
  • Отображение в DataGridView: издержки на строку около 4000 байтов (вы должны проверить это самостоятельно, часть может быть сохранена в зависимости от прокрутки): 27280000000 =
  • Это 26ГБ

Теперь у меня есть система с 64 ГБ внутри, 64 бита. Это может занять всего несколько секунд (при условии, что я не буду прокручивать). Однако заполнение 5000 строк может занять меньше нескольких миллисекунд, даже в средней системе (5000 записей - это немного).

Любая система, которой не хватает памяти, начнет пейджинг (переключение на физический файл подкачки). Это становится очень медленным, порядки величины. Помните об этом при игре с относительно большими наборами данных.

Примечание: я предположил, что все было случайно, а вы пытались измерить скорость самого объекта. Но если ваши данные поступают с диска, из удаленной базы данных или, что еще хуже, из веб-службы, это может занять от нескольких секунд до нескольких часов.

Активный каталог

РЕДАКТИРОВАТЬ: в последнем комментарии под ответом Дарина, вы говорите об Active Directory. Это дистанционно, и ваша скорость, скорее всего, будет зависеть больше от AD, чем от чего-либо еще. Добавьте подкачку страниц (т. Е. Загружайте только то, что хотите показать), и вы получите разумную производительность.

Ваш код

Вы показываете немного своего кода. Попробуйте / поймайте вокруг сеттеров: они ничего не делают, нечего ловить. С точки зрения производительности: вы только что показали часть, которая не критична для производительности (если ни одна из этих строк не является огромной, см. Мой раздел памяти выше). Часть, которая медленная , является вашей частью AD.

Заключение (пока)

Пересмотрите свой дизайн. Прочитайте данные в виде фрагментов из 10 или 20 записей и запросите только те поля / свойства из AD, которые действительно необходимы для отображения. Вы не можете показать их все сразу. DataGridView имеет отличные функции для подкачки, я предлагаю вам использовать события подкачки в сочетании с лучшей загрузкой данных.

В ответ на ваше замечание о том, что оно неожиданно заняло намного больше времени, чем 5000 записей: измерьте счетчики производительности каждой системы, проверьте память, сбои страниц, сеть. Или просто не читайте более 5000 записей одновременно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...