![]() |
|
Модераторы: gambit |
![]()
|
|
| EgoBrain |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 23.3.2008 Где: Комната Репутация: нет Всего: 2 |
Кто-нить знает алгоритм, как организовать постраичную загрузку DataSet, или поэтапное выполнение ExecuteReader()? Когда выполняю полнотью чтение ли заполнение прога виснет из-за недостатка памяти при рабте с болшиме таблицами (более 600000 записей).
|
|||
|
||||
| unicuum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 830 Регистрация: 16.3.2005 Где: Рашка Репутация: нет Всего: 8 |
Уже обсуждалось, используй потоки. -------------------- ![]() обычный день на винграде |
|||
|
||||
| akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: нет Всего: 5 |
Гамильтон "ADO.NET для профессионалов"
9.4. Повышение производительности при листании. посмотри. может, поможет. -------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
| EgoBrain |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 23.3.2008 Где: Комната Репутация: нет Всего: 2 |
Мб дашь ссылку? Спотоками неумею работать :( |
|||
|
||||
| unicuum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 830 Регистрация: 16.3.2005 Где: Рашка Репутация: нет Всего: 8 |
Вот здесь велось обсуждение http://forum.vingrad.ru/topic-183692.html. Про потоки кратко скажу так, нужно использовать BackgroundWorker или если в используемой версии фреймворка его нет, то что внутри пространства имён System.Threading. Второе, запись в бд и чтение из бд совершенно разные вещи, и некоторые из приёмов улучшающие чтения данных замедляют запись. Раз тебе нужна быстрая скорость чтения, значит нужно индексировать поля по которым происходит выборка. Вот как раз там остановился на том, что запись 10.5 млн записей несколькими задаваемыми параметрами (в том обсуждении некоторые не посмотрели на мой код, что они не однотипны и могут меняться с каждой новой строкой, просто ради чистоты эксперимента не хотелось тратить время на генерацию) осуществляется 11 минут. Замечу, ключевые поля индексированы. Скорость записи улучшают транзакции, но для чтения это не нужно, то есть просто делаешь индексированными те поля по которым хочешь фильтровать. Обязательно почитай обсуждение Если у тебя в таблице 600000 записей, что меньше того над чем я проводил эксперименты, и тем не менее не мало для кеша, то смысла загонять всё это туда нет. По идее в кеш нужно загонять лишь то, что используется в данный момент, но не более. Так или иначе, но если ты всё сделал правильно, то подвисание должно быть кратковременным, но чтобы программа не подавало виду, что подвисла даже на доли секунды, нужно создавать для операции выборки отдельный поток (читай книгу описанную ниже). По поводу ExecuteReader могу сказать так, есть случаи когда нужно использовать его, то есть DataReader, есть когда нужен DataAdapter, ко вторым кстати относится заливка в кеш (DataSet, DataTable). В общем, можно долго разглагольствовать и хотя книг по базам данных в ADO.NET достаточно много, я рекомендую скачать из сети "Дэвид Сеппа - Microsoft ADO.NET.pdf" и ещё примеры к этой книге "Дэвид Сеппа - Microsoft ADO.NET Setup_VCSharp.exe" и "Дэвид Сеппа - Microsoft ADO.NET Setup_VB.exe". В ней содержится практически все ответы. Там и потоки в БД, и постраничная загрузка, ускоренное чтение, ускоренная запись и очень много всего. Как бы переписывать сюда на форум то, что уже разжёвано специалистом высокого уровня думаю бессмысленно. -------------------- ![]() обычный день на винграде |
|||
|
||||
| EgoBrain |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 23.3.2008 Где: Комната Репутация: нет Всего: 2 |
Спасибо, про потоки я уже в RSDN чучуть почитал... Но книжку скачать надо, так как с Оркалом в С# недавно работать начал. Потом почитаю темку
Короче прочел таки тему
И еще хотелось бы получить ответ в ближайшие 1,5 суток, так как на работе нету инета всвязи с секретностью данных... Это сообщение отредактировал(а) EgoBrain - 12.6.2008, 14:03 |
||||
|
|||||
| akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 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; |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 8 Всего: 118 |
к сожалению у постраничной загрузки есть и проблемы.. например : пусть мы используем гламурные девэкпресовкие гриды (они поддерживаю группировку).
если делать постраничную загрузку, то что будет с группами непонятно вообще.... -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: нет Всего: 5 |
Очень даже понятно. Все должно быть нормально (ну, не совсем. часть данных не отобразится, если не переформировать запросы для выборки). Потому что если ты не отключишь в DataSet проверку ограничений, сообщение об ошибке вывалится раньше. Другой вопрос, что уже который год в форуме говорится, что привязка к датагриду больших таблиц не имеет смысла, это не улучшает визуальное восприятие данных. Еще от себя добавлю, что, возможно, к еще даже большему ухудшению зрительного восприятия приводит большое количество столбцов. Так что ставьте над датагридом комбобох для выбора значения из справочника и его значение передавайте в запрос, по которому происходит выборка данных. Это сообщение отредактировал(а) akizelokro - 12.6.2008, 23:42 -------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
| EgoBrain |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 23.3.2008 Где: Комната Репутация: нет Всего: 2 |
Ночью ходил к другу (у него безлемитка с часа), зарядил ему на скачку ссылку http://m1wm.spb.ru/ebooks/microsoft_adonet...saxil_malik.rar
Ну там тож название "ADO.NET для профессионалов", вот только автора непомню, сегодня днем зайду к нему, посмотрю что он мне накачал... А в этих книгах "ADO.NET для профессионалов" на сришотке примеры? |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 8 Всего: 118 |
akizelokro я не про те группы. а про группировку средставами грида ).
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: нет Всего: 5 |
А я про что?
если при изменении группировки не менять запросы для выборки, то у тебя просто отобразятся не все данные. это как бы если ты с самого начала не всю таблицу загрузил, а некоторую часть ее. Ты почти спросил, - я почти ответил -------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 8 Всего: 118 |
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| Idsa |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 15 Всего: 62 |
Посетите вот эту страничку: http://demos.devexpress.com/ASPxGridViewDe...FocusedRow.aspx Это демонстрация работы Devexpress'овского веб-грида. Каждое действие там выполняется через Callback'и, поэтому при группировке просто заново будут запрошены только те данные, которые нужны. Думаю, примерно так же действует и их WinForms грид. Собственные решения этой проблемы зачастую получаются заточенными под определенную задачу и гибкостью не отличаются. Если уж есть возможность воспользоваться компонентами DevExpress, то по-моему это лучший выход. |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Базы данных под .NET | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |