как оптимизировать работу с памятью для такого случая?

Winnipuh
Дата: 25.01.2010 14:44:21
Віполняется запрос к sql server, читается множество записей, для какждой из которых
строится объект и пишется на диск, т.е. строится индекс на диске.
В случае, когда множество содержит 20 млн записей приложение ест почти память.

Т.е. я так понимаю, что сначала приложение всасывает весь резулт сет, и только потом обрабатывает.

Как можно по-жругому, более оптимально сделать?
дерево
Дата: 25.01.2010 15:13:21
Рррэзать. На снимки.
дерево
Дата: 25.01.2010 15:13:36
Пакеты ,если угодно.
vagner
Дата: 25.01.2010 15:15:05
Winnipuh
Т.е. я так понимаю, что сначала приложение всасывает весь резулт сет, и только потом обрабатывает.


Если результат читаете через DataAdapter, то да. Попробуйте задействовать DataReader.
дерево
Дата: 25.01.2010 15:22:42
1 запрос - на кол-во строк. Второй запрос на закачко нужного (допустимого) кол-ва в цикле. Вместе с выгрузкой в файл. Имя файла генерится. И сохраняется в коллекции. Затем вся коллекция имен файлов записывается в главный файл. Решение можно сделать многопоточно. Грузить сразу несколько пакетов.

А ридер там или нет - дело десятое по большому счету. Тот же адаптер как вы думаете за счет чего селект выполняет? Да тот же ридер ему и грузит.
vagner
Дата: 25.01.2010 15:42:46
дерево
А ридер там или нет - дело десятое по большому счету. Тот же адаптер как вы думаете за счет чего селект выполняет? Да тот же ридер ему и грузит.


Да, только адаптер грузит весь результат сразу, а если воспользоваться непосредственно ридером, то в памяти будет только одна строка (не считая того, что будет в буфере провайдера).
дерево
Дата: 25.01.2010 15:49:17
vagner,

ну и чего ридер применительно к данной задаче даст? какое такое неоспоримое преимущество? По сравнению с предварительной разбивкой на пакеты? Отвечу априори - ничегошеньки абсолютно. Потому что строки всё-равно где-то надо будет накапливать. Хоть в своём классе, хоть в датасете.
vagner
Дата: 25.01.2010 17:09:02
дерево,

Winnipuh
Віполняется запрос к sql server, читается множество записей, для какждой из которых
строится объект и пишется на диск


Это пусть топиккастер решает. Если записи не связаны друг с другом, то ничего накапливать не надо, прочитал запись, построил объект, записал объект на диск и про запись можно забыть.
Winnipuh
Дата: 25.01.2010 17:21:00
vagner
дерево,

Winnipuh
Віполняется запрос к sql server, читается множество записей, для какждой из которых
строится объект и пишется на диск


Это пусть топиккастер решает. Если записи не связаны друг с другом, то ничего накапливать не надо, прочитал запись, построил объект, записал объект на диск и про запись можно забыть.


совсем не связаны, мне надо прочитать и построить для каждой записи документ для индекса Lucene.NET
Т.е. обработал запись - забыл
vagner
Дата: 25.01.2010 18:10:36
Winnipuh,

ну, вот и берите в руки ДатаРидер и построчно стройте индексы.