|
|
|
ADO.Net и большие объемы данных
|
|||
|---|---|---|---|
|
#18+
Добрый день! Столкнулись со следующей проблемой в ADO.Net. Есть таблица на SQL сервере, для простоты - одна таблица. В настоящее время она занимает 61Мб. При загрузке этой таблицы в DataTable "съедается" ровно 160 Мб (а если использовать DataSet и DataTable, то немножко побольше - 168Мб). В дальнейшем эта таблица грузится не в стандартный DGV, а в самописный контрол, к-росто летает (очень быстро скроллирует и перемещается по таким большим данным). НО уже сейчас у программы начинаются проблемы (нехватка памяти), а в дальнейшем таблица будет только расти. Одна из задач программы - показать все данные сразу (так удобнее работать клиенту, и так работают программы у конкурентов). Т.н. "paging" (как на интернет-форумах - показывать постранично, с кнопками "следующая страница", "предыдущая страница", и т.п.) нельзя использовать, т.к. неудобно пользоваться. В то же время, MS Sql 2k5 Management Studio, написанная также на C# и Ado.Net, легко справляется с подобными данными, и даже гораздо большими. Например, полное открытие (не select * from table, а именно right click on table -> open table) открывает всю таблицу, используя 12Мб ОЗУ, а когда мы проскроллим всю эту таблицу до самого конца, у нас будет израсходовано еще столько же - 12Мб ОЗУ. Таким образом, если мы по-простому (как в учебнике ADO) открываем таблицу, то расходуется 160Мб, а SQL Management Studio на это же действие расходует всего лишь 12-24Мб. Есть предположения, как она это делает? И вопрос в догонку - почему с#, framework, ado.net не используют виртуальную память, а вылетают с исключением "Out of memory"? Может, настройка такая есть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2009, 11:45 |
|
||
|
ADO.Net и большие объемы данных
|
|||
|---|---|---|---|
|
#18+
XML наше все в ado.net ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2009, 11:47 |
|
||
|
ADO.Net и большие объемы данных
|
|||
|---|---|---|---|
|
#18+
И сколько можно говорить, ну не может живой человек работать с такими объемами , сделайте фильтры пусть выбирает что ему нужно. Хочет видеть все пусть видит - но медлееееено. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2009, 11:48 |
|
||
|
ADO.Net и большие объемы данных
|
|||
|---|---|---|---|
|
#18+
Что значит "XML наше все"? Прокомментируйте. Что касается фильтров = конечно же, они есть. Я не говорю, что пользователю отображается вся таблица, я сказал "вся таблица грузится в память". Грузится для того, чтобы пользователь одновременно мог наложить любое количество фильтров и отобразить любое количество вкладок с данными. Таким образом, таблицу мы загружаем в память один раз, а показываем уже либо всю, либо фильтрованные части. И при наложении каждого нового фильтра память уже не расходуется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2009, 11:57 |
|
||
|
ADO.Net и большие объемы данных
|
|||
|---|---|---|---|
|
#18+
Это значит что в датасете ваши данные как xml хранит. Фильтры это значит фильтры на сервере, а не все данные на клиента, а потом их фильтруем ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2009, 11:59 |
|
||
|
ADO.Net и большие объемы данных
|
|||
|---|---|---|---|
|
#18+
КхеИ сколько можно говорить, ну не может живой человек работать с такими объемами , сделайте фильтры пусть выбирает что ему нужно. Хочет видеть все пусть видит - но медлееееено. Не обобщайте. Если Вы неспособны работать с большими объёмами - это не означает, что кто-то другой не способен. Автору - выбросьте весь этот адонет с фреймворком нахер ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2009, 12:00 |
|
||
|
ADO.Net и большие объемы данных
|
|||
|---|---|---|---|
|
#18+
Пропала Планета Не обобщайте. Если Вы неспособны работать с большими объёмами - это не означает, что кто-то другой не способен. Вы и есть этот кто то?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2009, 12:01 |
|
||
|
ADO.Net и большие объемы данных
|
|||
|---|---|---|---|
|
#18+
ТрудностьВ_ADO, http://www.rsdn.ru/article/dotnet/DataGridView20.xml#EOAAE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2009, 12:01 |
|
||
|
ADO.Net и большие объемы данных
|
|||
|---|---|---|---|
|
#18+
Уважаемые, но ведь SQL Server Management Studio успешно работает, и быстро, и с большими (гораздо большими, чему у меня) объемами! Вопрос - как она это делает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2009, 12:01 |
|
||
|
ADO.Net и большие объемы данных
|
|||
|---|---|---|---|
|
#18+
Может он не в датасет загружает данные, как считаете?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2009, 12:02 |
|
||
|
ADO.Net и большие объемы данных
|
|||
|---|---|---|---|
|
#18+
Кхе, Насчёт больших объёмов - да, в частности я. И я не одинок По поводу менеджмент студии - ееё тоже можно уложить приличным объёмом данных Автору же помочь может грид в виртуальном режиме(от любого производителя).данные могут при этом лежать хоть в dbf , хоть в текстовом файле, хоть в локальной СУБД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2009, 12:07 |
|
||
|
ADO.Net и большие объемы данных
|
|||
|---|---|---|---|
|
#18+
Пропала Планета, Не поделитесь с каким объемами вы работаете в дататэйбл? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2009, 12:15 |
|
||
|
ADO.Net и большие объемы данных
|
|||
|---|---|---|---|
|
#18+
Вообще, идея насчет виртуального режима интересная. Данные у нас лежат сейчас в xml на жестком диске, но можно сделать и dbf, и mdb, и даже SQL Compact CE. Только вот еще задача: должна поддерживаться сортировка. Виртуальный режим позволит применять сортировку таблицы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2009, 12:22 |
|
||
|
ADO.Net и большие объемы данных
|
|||
|---|---|---|---|
|
#18+
Спасибо за наводку на виртуальный грид! Теперь я знаю на 100%: в SQL Management Studio именно так и реализовано. Теперь память не "съедается", максимум - 26Мб, и работает все быстро. Хороший пример здесь: http://msdn.microsoft.com/ru-ru/library/ms171625.aspx Пример использует базу Nortwind, но не заточен под нее, будет работать с любой другой таблицей, где первый столбец - уникальный ключ. Сотня тысяч строк - и все летает (ну насколько стандартный dgv вообще может летать...). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2009, 13:41 |
|
||
|
ADO.Net и большие объемы данных
|
|||
|---|---|---|---|
|
#18+
Мда.. я вот сейчас с ораклом. вожусь... секционированная таблица, 48 полей, ~2 млрд. записей. Интересно, что будет, если я всю эту таблицу попробую грузануть на клиента?.. Первым делом мы испортим самолёты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2009, 14:07 |
|
||
|
ADO.Net и большие объемы данных
|
|||
|---|---|---|---|
|
#18+
КхеЭто значит что в датасете ваши данные как xml хранит. Это значит, что надо открыть рефлектор и посмотреть, что там и как хранится, а не молоть чепуху. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2009, 14:07 |
|
||
|
ADO.Net и большие объемы данных
|
|||
|---|---|---|---|
|
#18+
Ъй, меряться с Вами тяжело = у вас больше :) Всему же есть разумные пределы, про миллиард записей речь не шла :) Сейчас у меня ~60 тыс. записей, при любом раскладе будет никак не больше 600 тыс., скорее всего будет меньше 300 тыс. записей одновременно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2009, 17:02 |
|
||
|
ADO.Net и большие объемы данных
|
|||
|---|---|---|---|
|
#18+
Уважаемые, а почему никто не обратил внимание на второй вопрос из первого поста: почему с#, framework, ado.net не используют виртуальную память, а вылетают с исключением "Out of memory"? Просто непонятно, как может быть out of memory в системе, где существует файл подкачки... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2009, 17:05 |
|
||
|
ADO.Net и большие объемы данных
|
|||
|---|---|---|---|
|
#18+
ТрудностьВ_ADOУважаемые, но ведь SQL Server Management Studio успешно работает, и быстро, и с большими (гораздо большими, чему у меня) объемами! Вопрос - как она это делает? Очень просто. Любая таблица данных разбита в MS SQL на страницы определенного фиксированного размера. А не лежит тупо целиком. Как это делаете вы. Скачала первый кадр - страницу - подкачивает второй. потом третий, но при этом первый выбрасывает. Грубо говоря тот же самый пейджинг. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2009, 17:30 |
|
||
|
ADO.Net и большие объемы данных
|
|||
|---|---|---|---|
|
#18+
ТопикстартерУважаемые, а почему никто не обратил внимание на второй вопрос из первого поста: почему с#, framework, ado.net не используют виртуальную память, а вылетают с исключением "Out of memory"? Просто непонятно, как может быть out of memory в системе, где существует файл подкачки... Читайте про CLR. Принцип организации памяти в среде. Управляемая куча. Стек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2009, 17:34 |
|
||
|
ADO.Net и большие объемы данных
|
|||
|---|---|---|---|
|
#18+
Вроде бы решили задачу: поставили SQL CE, сунули в него эту большую таблицу. Нарисовали грид в виртуальном режиме - все бы замечательно. Но, как Вы знаете, существует не так много способов организации PAGING (постраничная выборка) при использовании MS Sql. Учитывая что SQL CE не умеет работать с row_number и не умеет делать set rowcount, этих способов остается еще меньше - два или три. При этом на 60 тыс. записей возникает следующая проблема = первые страницы возвращаются быстро, чем дальше - тем медленнее, последние страницы вообще еле-еле ворочаются :( Модератор: Тема перенесена из форума "C#.NET". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2009, 18:30 |
|
||
|
ADO.Net и большие объемы данных
|
|||
|---|---|---|---|
|
#18+
Есть такая штука - LinqDataSource у DevExpress, на его GridControl преблема решается совершенно прозрачно. Любой объем данных, скроллится быстро в любую сторону, память при этом расходуется минимально. все когда-нибудь начинается снова ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2009, 09:37 |
|
||
|
ADO.Net и большие объемы данных
|
|||
|---|---|---|---|
|
#18+
ТопикстартерУважаемые, а почему никто не обратил внимание на второй вопрос из первого поста: почему с#, framework, ado.net не используют виртуальную память, а вылетают с исключением "Out of memory"? Просто непонятно, как может быть out of memory в системе, где существует файл подкачки... Курим доки про "распределение адресного пространства процесса Win32" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2009, 11:39 |
|
||
|
ADO.Net и большие объемы данных
|
|||
|---|---|---|---|
|
#18+
хах, спустя месяц этот потерянный топик нашел знаток венды Антошка и сказал как отрезал, курите про вин32. Антошка, вин32-то тут причем со своим адресным пространством? разъясни что ты там прочитал :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2009, 23:06 |
|
||
|
ADO.Net и большие объемы данных
|
|||
|---|---|---|---|
|
#18+
зыхах, спустя месяц этот потерянный топик нашел знаток венды Антошка и сказал как отрезал, курите про вин32. Антошка, вин32-то тут причем со своим адресным пространством? разъясни что ты там прочитал :) Программы где выполняются? В процессах операционной системы, причём не важно .Net ли это, либо native-код. Всего один процесс может адресовать не больше 4Гб (2^32, если кто не помнит). Далее, ОС забирает под свои нужны верхние 2 Гб в КАЖДОМ процессе пользователя, делая их недоступными за некоторыми исключениям. Следовательно, программе осталось уже не более двух Гб. Потом ещё веселее: в эти два гигабайта подгружаются код и глобальные данные программы и всех используемых dll, в т.ч. системных типа user32.dll. Там же на каждый поток создаются стеки (а это по умолчанию 1 Мб на поток) и системные кучи. В итоге пользователю останется доступно порядка 2000 Мб. Если их все занять, то адресное пространство процесса исчерпается и вывалится знаменитое OutOfMemory. Подробнее на http://www.thevista.ru/page.php?id=10539&print=1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2009, 21:45 |
|
||
|
|

start [/forum/topic.php?fid=17&msg=35963156&tid=1351441]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
136ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 230ms |
| total: | 451ms |

| 0 / 0 |
