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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Постраничаня загрузка DataSet 
:(
    Опции темы
EgoBrain
Дата 9.6.2008, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Кто-нить знает алгоритм, как организовать постраичную загрузку DataSet, или поэтапное выполнение ExecuteReader()? Когда выполняю полнотью чтение ли заполнение прога виснет из-за недостатка памяти при рабте с болшиме таблицами (более 600000 записей).
PM MAIL ICQ Skype   Вверх
unicuum
Дата 9.6.2008, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(EgoBrain @  9.6.2008,  10:37 Найти цитируемый пост)
Когда выполняю полнотью чтение ли заполнение прога виснет из-за недостатка памяти при рабте с болшиме таблицами (более 600000 записей). 

Уже обсуждалось, используй потоки.


--------------------
user posted image
обычный день на винграде
PM   Вверх
akizelokro
Дата 9.6.2008, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


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

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



Гамильтон "ADO.NET для профессионалов"
9.4. Повышение производительности при листании.
посмотри. может, поможет.


--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
EgoBrain
Дата 10.6.2008, 01:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

Уже обсуждалось, используй потоки.


Мб дашь ссылку? Спотоками неумею работать :(
PM MAIL ICQ Skype   Вверх
unicuum
Дата 11.6.2008, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(EgoBrain @  10.6.2008,  01:28 Найти цитируемый пост)
Мб дашь ссылку? Спотоками неумею работать :( 

Вот здесь велось обсуждение http://forum.vingrad.ru/topic-183692.html.

Про потоки кратко скажу так, нужно использовать BackgroundWorker или если в используемой версии фреймворка его нет, то что внутри пространства имён System.Threading.

Второе, запись в бд и чтение из бд совершенно разные вещи, и некоторые из приёмов улучшающие чтения данных замедляют запись. Раз тебе нужна быстрая скорость чтения, значит нужно индексировать поля по которым происходит выборка.

Вот как раз там остановился на том, что запись 10.5 млн записей несколькими задаваемыми параметрами (в том обсуждении некоторые не посмотрели на мой код, что они не однотипны и могут меняться с каждой новой строкой, просто ради чистоты эксперимента не хотелось тратить время на генерацию) осуществляется 11 минут. Замечу, ключевые поля индексированы.

Скорость записи улучшают транзакции, но для чтения это не нужно, то есть просто делаешь индексированными те поля по которым хочешь фильтровать.

Цитата(EgoBrain @  9.6.2008,  10:37 Найти цитируемый пост)
с болшиме таблицами (более 600000 записей)

Обязательно почитай обсуждение smile это не очень большие таблицы, другое дело в способе работы. Вот когда я брал 10.5 млн записей из БД (не из кеша коим является DataSet, DataTable и.т.д.), то время выборки зависело от количества выбираемых записей. Если их мало, то результат получался сразу, а когда их было несколько сотен тысяч (из таблицы в 10.5 млн записей), то приходилось подождать некоторое время (они сначала грузились в кеш и потом выводились на экран). Благодаря потокам моя программа не висла, просто писала загружаются данные.

Если у тебя в таблице 600000 записей, что меньше того над чем я проводил эксперименты, и тем не менее не мало для кеша, то смысла загонять всё это туда нет. По идее в кеш нужно загонять лишь то, что используется в данный момент, но не более. Так или иначе, но если ты всё сделал правильно, то подвисание должно быть кратковременным, но чтобы программа не подавало виду, что подвисла даже на доли секунды, нужно создавать для операции выборки отдельный поток (читай книгу описанную ниже).

По поводу ExecuteReader могу сказать так, есть случаи когда нужно использовать его, то есть DataReader, есть когда нужен DataAdapter, ко вторым кстати относится заливка в кеш (DataSet, DataTable).

В общем, можно долго разглагольствовать и хотя книг по базам данных в ADO.NET достаточно много, я рекомендую скачать из сети "Дэвид Сеппа -  Microsoft ADO.NET.pdf" и ещё примеры к этой книге "Дэвид Сеппа -  Microsoft ADO.NET Setup_VCSharp.exe" и "Дэвид Сеппа -  Microsoft ADO.NET Setup_VB.exe". В ней содержится практически все ответы. Там и потоки в БД, и постраничная загрузка, ускоренное чтение, ускоренная запись и очень много всего. Как бы переписывать сюда на форум то, что уже разжёвано специалистом высокого уровня думаю бессмысленно.


--------------------
user posted image
обычный день на винграде
PM   Вверх
EgoBrain
Дата 12.6.2008, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Спасибо, про потоки я уже в RSDN чучуть почитал... Но книжку скачать надо, так как с Оркалом в С# недавно работать начал. Потом почитаю темку 
Цитата
Вот здесь велось обсуждение http://forum.vingrad.ru/topic-183692.html.
 То что загружать данные в кеш (представление) в фоновом режиме это понятно, но опять же фоновый режим не спасает, так как оперативки мало в персональных компьютерах, то есть данные нужно по порциям загружать в нее... 

Короче прочел таки тему 
Цитата
http://forum.vingrad.ru/topic-183692.html.
 , но нифига не понял, где конкретно в кодах постраничная загрузка из базы? Хотелось бы пример на Сришотке, а не на VB  smile  smile 

И еще хотелось бы получить ответ в ближайшие 1,5 суток, так как на работе нету инета всвязи с секретностью данных...


Это сообщение отредактировал(а) EgoBrain - 12.6.2008, 14:03
PM MAIL ICQ Skype   Вверх
akizelokro
Дата 12.6.2008, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


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

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



найди в интернете ссылку на книгу Гамильтона и посмотри статью. В ней приведен код примерной хранимой процедуры для постраничной загрузки данных и как он  используется.

еще можешь посмотреть в MSDN  статью под нахванием "Implementing Virtual Mode with Just-In-Time Data Loading in the Windows Forms DataGridView Control"  ms-help://MS.MSDNQTR.v90.en/dv_fxmclictl/html/c2a052b9-423c-4ff7-91dc-d8c7c79345f6.htm . Там другой вариант оформления постраничной загрузки данных

Это сообщение отредактировал(а) akizelokro - 12.6.2008, 19:42


--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
jonie
Дата 12.6.2008, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

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



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


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
akizelokro
Дата 12.6.2008, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


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

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



Цитата

то что будет с группами непонятно вообще.... 

Очень даже понятно. Все должно быть нормально (ну, не совсем. часть данных не отобразится, если не переформировать запросы для выборки). Потому что если ты не отключишь в DataSet проверку ограничений, сообщение об ошибке вывалится раньше.
Другой вопрос, что уже который год в форуме говорится, что привязка к датагриду больших таблиц не имеет смысла, это не улучшает визуальное восприятие данных. Еще от себя добавлю, что, возможно, к еще даже большему ухудшению зрительного восприятия приводит большое количество столбцов.

Так что ставьте над датагридом комбобох для выбора значения из справочника и его значение передавайте в запрос, по которому происходит выборка данных.


Это сообщение отредактировал(а) akizelokro - 12.6.2008, 23:42


--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
EgoBrain
Дата 13.6.2008, 02:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ночью ходил к другу (у него безлемитка с часа), зарядил ему на скачку ссылку http://m1wm.spb.ru/ebooks/microsoft_adonet...saxil_malik.rar
Ну там тож название "ADO.NET для профессионалов", вот только автора непомню, сегодня днем зайду к нему, посмотрю что он мне накачал... А в этих книгах "ADO.NET для профессионалов" на сришотке примеры?
PM MAIL ICQ Skype   Вверх
jonie
Дата 13.6.2008, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

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



akizelokro я не про те группы. а про группировку средставами грида ).


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
akizelokro
Дата 13.6.2008, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


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

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



А я про что? 
Цитата

а про группировку средставами грида )

если при изменении группировки не менять запросы для выборки, то у тебя просто отобразятся не все данные. это как бы если ты с самого начала не всю таблицу загрузил, а некоторую часть ее.
Ты почти спросил, - я почти ответил smile 



--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
jonie
Дата 14.6.2008, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

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



Цитата

если при изменении группировки не менять запросы для выборки, то у тебя просто отобразятся не все данные. 
вот именно в этом и есть проблема. пользователь будет ожидать что "он уже просмотрел одну группу" при листании (нафига ему листать кудато еще, если он уже "все видел" что ему нужно)...


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Idsa
Дата 14.6.2008, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 15
Всего: 62



Цитата(jonie @  12.6.2008,  22:46 Найти цитируемый пост)
к сожалению у постраничной загрузки есть и проблемы.. например : пусть мы используем гламурные девэкпресовкие гриды (они поддерживаю группировку).
если делать постраничную загрузку, то что будет с группами непонятно вообще....

Посетите вот эту страничку: http://demos.devexpress.com/ASPxGridViewDe...FocusedRow.aspx
Это демонстрация работы Devexpress'овского веб-грида. Каждое действие там выполняется через Callback'и, поэтому при группировке просто заново будут запрошены только те данные, которые нужны. Думаю, примерно так же действует и их WinForms грид.

Цитата(akizelokro @  12.6.2008,  19:41 Найти цитируемый пост)
найди в интернете ссылку на книгу Гамильтона и посмотри статью. В ней приведен код примерной хранимой процедуры для постраничной загрузки данных и как он  используется.

еще можешь посмотреть в MSDN  статью под нахванием "Implementing Virtual Mode with Just-In-Time Data Loading in the Windows Forms DataGridView Control"  ms-help://MS.MSDNQTR.v90.en/dv_fxmclictl/html/c2a052b9-423c-4ff7-91dc-d8c7c79345f6.htm . Там другой вариант оформления постраничной загрузки данных

Собственные решения этой проблемы зачастую получаются заточенными под определенную задачу и гибкостью не отличаются. Если уж есть возможность воспользоваться компонентами DevExpress, то по-моему это лучший выход.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

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

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

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


 




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


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

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