powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / ADO.Net и большие объемы данных
25 сообщений из 42, страница 1 из 2
ADO.Net и большие объемы данных
    #35963006
Добрый день!
Столкнулись со следующей проблемой в 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"? Может, настройка такая есть?
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #35963008
Кхе
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
XML наше все в ado.net
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #35963013
Кхе
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И сколько можно говорить, ну не может живой человек работать с такими объемами , сделайте фильтры пусть выбирает что ему нужно. Хочет видеть все пусть видит - но медлееееено.
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #35963046
Что значит "XML наше все"? Прокомментируйте.

Что касается фильтров = конечно же, они есть. Я не говорю, что пользователю отображается вся таблица, я сказал "вся таблица грузится в память". Грузится для того, чтобы пользователь одновременно мог наложить любое количество фильтров и отобразить любое количество вкладок с данными. Таким образом, таблицу мы загружаем в память один раз, а показываем уже либо всю, либо фильтрованные части. И при наложении каждого нового фильтра память уже не расходуется.
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #35963057
Кхе
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это значит что в датасете ваши данные как xml хранит.

Фильтры это значит фильтры на сервере, а не все данные на клиента, а потом их фильтруем
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #35963058
КхеИ сколько можно говорить, ну не может живой человек работать с такими объемами , сделайте фильтры пусть выбирает что ему нужно. Хочет видеть все пусть видит - но медлееееено.
Не обобщайте. Если Вы неспособны работать с большими объёмами - это не означает, что кто-то другой не способен.


Автору - выбросьте весь этот адонет с фреймворком нахер
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #35963063
Кхе
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пропала Планета
Не обобщайте. Если Вы неспособны работать с большими объёмами - это не означает, что кто-то другой не способен.

Вы и есть этот кто то?)
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #35963065
zz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТрудностьВ_ADO,

http://www.rsdn.ru/article/dotnet/DataGridView20.xml#EOAAE
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #35963068
Уважаемые, но ведь SQL Server Management Studio успешно работает, и быстро, и с большими (гораздо большими, чему у меня) объемами! Вопрос - как она это делает?
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #35963075
Кхе
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может он не в датасет загружает данные, как считаете?)
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #35963098
Кхе,

Насчёт больших объёмов - да, в частности я. И я не одинок


По поводу менеджмент студии - ееё тоже можно уложить приличным объёмом данных


Автору же помочь может грид в виртуальном режиме(от любого производителя).данные могут при этом лежать хоть в dbf , хоть в текстовом файле, хоть в локальной СУБД.
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #35963130
Кхе
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пропала Планета,

Не поделитесь с каким объемами вы работаете в дататэйбл?
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #35963156
Вообще, идея насчет виртуального режима интересная. Данные у нас лежат сейчас в xml на жестком диске, но можно сделать и dbf, и mdb, и даже SQL Compact CE.

Только вот еще задача: должна поддерживаться сортировка. Виртуальный режим позволит применять сортировку таблицы?
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #35963417
Спасибо за наводку на виртуальный грид!

Теперь я знаю на 100%: в SQL Management Studio именно так и реализовано.
Теперь память не "съедается", максимум - 26Мб, и работает все быстро.

Хороший пример здесь: http://msdn.microsoft.com/ru-ru/library/ms171625.aspx
Пример использует базу Nortwind, но не заточен под нее, будет работать с любой другой таблицей, где первый столбец - уникальный ключ. Сотня тысяч строк - и все летает (ну насколько стандартный dgv вообще может летать...).
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #35963488
Фотография Ъй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мда.. я вот сейчас с ораклом. вожусь... секционированная таблица, 48 полей, ~2 млрд. записей. Интересно, что будет, если я всю эту таблицу попробую грузануть на клиента?..

Первым делом мы испортим самолёты.
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #35963490
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КхеЭто значит что в датасете ваши данные как xml хранит.
Это значит, что надо открыть рефлектор и посмотреть, что там и как хранится, а не молоть чепуху.
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #35963899
Ъй, меряться с Вами тяжело = у вас больше :)
Всему же есть разумные пределы, про миллиард записей речь не шла :)
Сейчас у меня ~60 тыс. записей, при любом раскладе будет никак не больше 600 тыс., скорее всего будет меньше 300 тыс. записей одновременно.
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #35963905
Уважаемые, а почему никто не обратил внимание на второй вопрос из первого поста:
почему с#, framework, ado.net не используют виртуальную память, а вылетают с исключением "Out of memory"? Просто непонятно, как может быть out of memory в системе, где существует файл подкачки...
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #35963955
Фотография дерево
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТрудностьВ_ADOУважаемые, но ведь SQL Server Management Studio успешно работает, и быстро, и с большими (гораздо большими, чему у меня) объемами! Вопрос - как она это делает?

Очень просто. Любая таблица данных разбита в MS SQL на страницы определенного фиксированного размера. А не лежит тупо целиком. Как это делаете вы. Скачала первый кадр - страницу - подкачивает второй. потом третий, но при этом первый выбрасывает. Грубо говоря тот же самый пейджинг.
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #35963965
Фотография дерево
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТопикстартерУважаемые, а почему никто не обратил внимание на второй вопрос из первого поста:
почему с#, framework, ado.net не используют виртуальную память, а вылетают с исключением "Out of memory"? Просто непонятно, как может быть out of memory в системе, где существует файл подкачки...

Читайте про CLR. Принцип организации памяти в среде. Управляемая куча. Стек.
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #35964062
Вроде бы решили задачу: поставили SQL CE, сунули в него эту большую таблицу. Нарисовали грид в виртуальном режиме - все бы замечательно. Но, как Вы знаете, существует не так много способов организации PAGING (постраничная выборка) при использовании MS Sql.

Учитывая что SQL CE не умеет работать с row_number и не умеет делать set rowcount, этих способов остается еще меньше - два или три. При этом на 60 тыс. записей возникает следующая проблема = первые страницы возвращаются быстро, чем дальше - тем медленнее, последние страницы вообще еле-еле ворочаются :(

Модератор: Тема перенесена из форума "C#.NET".
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #35966296
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть такая штука - LinqDataSource у DevExpress, на его GridControl преблема решается совершенно прозрачно. Любой объем данных, скроллится быстро в любую сторону, память при этом расходуется минимально.

все когда-нибудь начинается снова
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #36025237
Antoshka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТопикстартерУважаемые, а почему никто не обратил внимание на второй вопрос из первого поста:
почему с#, framework, ado.net не используют виртуальную память, а вылетают с исключением "Out of memory"? Просто непонятно, как может быть out of memory в системе, где существует файл подкачки...

Курим доки про "распределение адресного пространства процесса Win32"
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #36026670
зы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хах, спустя месяц этот потерянный топик нашел знаток венды Антошка и сказал как отрезал, курите про вин32. Антошка, вин32-то тут причем со своим адресным пространством? разъясни что ты там прочитал :)
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #36028719
Antoshka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зыхах, спустя месяц этот потерянный топик нашел знаток венды Антошка и сказал как отрезал, курите про вин32. Антошка, вин32-то тут причем со своим адресным пространством? разъясни что ты там прочитал :)

Программы где выполняются? В процессах операционной системы, причём не важно .Net ли это, либо native-код. Всего один процесс может адресовать не больше 4Гб (2^32, если кто не помнит). Далее, ОС забирает под свои нужны верхние 2 Гб в КАЖДОМ процессе пользователя, делая их недоступными за некоторыми исключениям. Следовательно, программе осталось уже не более двух Гб. Потом ещё веселее: в эти два гигабайта подгружаются код и глобальные данные программы и всех используемых dll, в т.ч. системных типа user32.dll. Там же на каждый поток создаются стеки (а это по умолчанию 1 Мб на поток) и системные кучи. В итоге пользователю останется доступно порядка 2000 Мб. Если их все занять, то адресное пространство процесса исчерпается и вывалится знаменитое OutOfMemory. Подробнее на http://www.thevista.ru/page.php?id=10539&print=1
...
Рейтинг: 0 / 0
25 сообщений из 42, страница 1 из 2
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / ADO.Net и большие объемы данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]