Модераторы: gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ускорение вывода данных в datagridview 
:(
    Опции темы
XavierElf
Дата 25.4.2007, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 24.1.2007
Где: г. Тверь

Репутация: нет
Всего: 1



Не знаю как решить проблему: имеется datagridview, который заполняется из dataset, проблема в том, что когда в datagridview заполняются тысяч десять рядов, при сортировке он начинает надолго задумываться... плюс к тому, для каждого ряда задаётся свой forecolor, который при сортировке сбрасывается... как можно ускорить сортировку и сделать так, чтобы после неё forecolor сохранялся?
--------------------
Даешь открытые исходники!
PM MAIL ICQ   Вверх
Exception
Дата 25.4.2007, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 2
Всего: 186



Боюсь, что с таким количеством строк он всегда будет долго грузиться.
PM   Вверх
6atoh
Дата 25.4.2007, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 160
Регистрация: 15.9.2006
Где: Minsk

Репутация: 1
Всего: 4



При таких больших обьемах данных советую всегда использовать Repeater. Ну и соответственно сортировку приходится ручками...
PM MAIL ICQ   Вверх
Exception
Дата 25.4.2007, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 2
Всего: 186



Дык мы (если я правильно понял) про контрол Windows Forms.
PM   Вверх
6atoh
Дата 25.4.2007, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 160
Регистрация: 15.9.2006
Где: Minsk

Репутация: 1
Всего: 4



Ужос.....совсем заэспэнэтился smile 
PM MAIL ICQ   Вверх
XavierElf
Дата 26.4.2007, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 24.1.2007
Где: г. Тверь

Репутация: нет
Всего: 1



Мда... А нельзя данные загонять в промежуточный буфер для последующего вывода, а то у меня есть программа (правда исходников нет), которая также написана с помощью WinForms и в ней загрузка данных в гриду и сортировка происходят практически мгновенно, а строк загружается в гриду порядка 40000... Как такое возможно?  smile 
--------------------
Даешь открытые исходники!
PM MAIL ICQ   Вверх
LuMee
Дата 26.4.2007, 10:06 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 30.3.2007

Репутация: нет
Всего: 1



Данные всегда будут в промежуточном буфере, типа того же DataTable. Вообще, тут неплохо бы посмотреть код, возможно, тормозит как раз процесс заполнения DataTable'а, или кто у вас там гридвью данными кормит...
Как вариант, можно еще призадуматься - а зачем пользователю 10 тыс. строк на экране сразу? Возможно, следует наложить на данные какие-то доп. фильтры, или еще чего в этом роде?
PM MAIL   Вверх
XavierElf
Дата 26.4.2007, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 24.1.2007
Где: г. Тверь

Репутация: нет
Всего: 1



В общем вот код чтения данных:
Код

                #region read data
                string textString;
                string[] splittextString;
                object[] newtextRow;
                StreamReader textSR = new StreamReader(TempDir + "\\text.txt");
                textString = textSR.ReadLine();
                textString = textSR.ReadLine();
                int i = 0;
                while (textString != null)
                {
                    splittextString = textString.Split(new Char[] { '\t' });
                    newtextRow = new object[splittextString.Length - 3];
                    newtextRow[0] = splittextString[0];
                    newtextRow[1] = splittextString[1];
                    newtextRow[2] = splittextString[2];
                    newtextRow[3] = splittextString[5] + splittextString[4] + splittextString[3];
                    textDGV.Rows.Add(newtextRow);
                    textDGV.Rows[i].DefaultCellStyle.ForeColor = Color.FromArgb(
                        int.Parse(splittextString[5], System.Globalization.NumberStyles.HexNumber), 
                        int.Parse(splittextString[4], System.Globalization.NumberStyles.HexNumber), 
                        int.Parse(splittextString[3], System.Globalization.NumberStyles.HexNumber));
                    textDGV.Rows[i].DefaultCellStyle.SelectionForeColor = Color.FromArgb(
                        int.Parse(splittextString[5], System.Globalization.NumberStyles.HexNumber), 
                        int.Parse(splittextString[4], System.Globalization.NumberStyles.HexNumber), 
                        int.Parse(splittextString[3], System.Globalization.NumberStyles.HexNumber));
                    textString = textSR.ReadLine();
                    i++;
                }
                textSR.Close();
                #endregion

Не знаю, как это лучше реализовать...
--------------------
Даешь открытые исходники!
PM MAIL ICQ   Вверх
mr.DUDA
Дата 27.4.2007, 08:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 8
Всего: 232



Цитата(LuMee @  26.4.2007,  10:06 Найти цитируемый пост)
Как вариант, можно еще призадуматься - а зачем пользователю 10 тыс. строк на экране сразу?

Согласен на 100%. Такой грид неудобно скроллировать и сложно найти то что требуется.


--------------------
user posted image
PM MAIL WWW   Вверх
XavierElf
Дата 28.4.2007, 08:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 24.1.2007
Где: г. Тверь

Репутация: нет
Всего: 1



Хорошо, тогда как лучше разбить на страницы где-то по тысяче строк? И сделать сортировку не видимых строк а всех строк, которые имеются?
--------------------
Даешь открытые исходники!
PM MAIL ICQ   Вверх
mr.DUDA
Дата 29.4.2007, 08:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 8
Всего: 232



Запрос делать с указанием TOP COUNT, а для сортировки - ORDER BY.


--------------------
user posted image
PM MAIL WWW   Вверх
XavierElf
Дата 2.5.2007, 09:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 24.1.2007
Где: г. Тверь

Репутация: нет
Всего: 1



Цитата(mr.DUDA @ 29.4.2007,  08:56)
Запрос делать с указанием TOP COUNT, а для сортировки - ORDER BY.

А если я данные беру не из базы а из файла? То есть у меня есть файл, определённой структуры. В нём разделители значений представлены табуляцией. Пробовал загружать из него сначала в датасет, потом из датасета в гриду, однако скорость была совсем уж страшной... Сделал напрямую вывод в гриду, однако всё равно не то...
--------------------
Даешь открытые исходники!
PM MAIL ICQ   Вверх
LuMee
Дата 3.5.2007, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 30.3.2007

Репутация: нет
Всего: 1



Думаю, с файлом тут быстро полюбому не получится. Ну разве что файл читать кусками: показать юзеру, скажем, 200 строк, потом по кнопке "Далее" - еще 200, ну в общем сделать что-то вроде постраничной разбивки.
Для пущего пафоса можно еще так извратиться: пусть первые 200 строк сразу заносятся в грид, а остальные тем временем в отдельном потоке засасываются в какой-нить List или DataTable, который затем задается в качестве DataSource гриду. Но тут уже надо будет хорошенько подумать, что да как.
Ну и наконец, может все-таки посмотреть в сторону какой-нибудь простенькой СУБД (типа SQLite или еще чего-нить такого встраиваемого)? С ней такие выкрутасы выкручивать будет попроще
PM MAIL   Вверх
XavierElf
Дата 3.5.2007, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 24.1.2007
Где: г. Тверь

Репутация: нет
Всего: 1



Цитата(LuMee @ 3.5.2007,  10:29)
Думаю, с файлом тут быстро полюбому не получится. Ну разве что файл читать кусками: показать юзеру, скажем, 200 строк, потом по кнопке "Далее" - еще 200, ну в общем сделать что-то вроде постраничной разбивки.
Для пущего пафоса можно еще так извратиться: пусть первые 200 строк сразу заносятся в грид, а остальные тем временем в отдельном потоке засасываются в какой-нить List или DataTable, который затем задается в качестве DataSource гриду. Но тут уже надо будет хорошенько подумать, что да как.
Ну и наконец, может все-таки посмотреть в сторону какой-нибудь простенькой СУБД (типа SQLite или еще чего-нить такого встраиваемого)? С ней такие выкрутасы выкручивать будет попроще

С базой уж точно нет смысла возиться... Дело в том, что с файлом, с которым я работаю, нужно провести следующие выкрутасы:
1) Декодировать
2) Дизасемблировать
3) Загрузить в гриду
4) В гриде изменить нужные куски файла
5) Сохранить в файл
6) Ассемблировать
7) Закодировать

ЗЫ. Чтобы не возникало никаких подозрений - я работаю над программой, которая работает со строковой информацией одной игры... Грубо говоря - для удобства локализации и т.п.  smile 
--------------------
Даешь открытые исходники!
PM MAIL ICQ   Вверх
mr.DUDA
Дата 5.5.2007, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 8
Всего: 232



XavierElf, может проще заюзать готовый провайдер для текстовых файлов (CSV например) который встроен в .NET Framework ? Тогда и нормальные SQL-запросы можно делать.


--------------------
user posted image
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.1462 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.