2015-09-30 1 views
2

Я использую большой объем данных для сравнения, в то время как выборка записей из БД происходит сотнями тысяч записей и вставка в datatable, но его использование большего объема памяти и производительности очень медленное. Есть ли какая-либо идея для подкачки данных к datatable.Я использую большой объем данных для сравнения. Есть ли какая-либо идея для подкачки данных в datatable

+0

Лучшим подходом является сравнение в базе данных, а не в памяти. Если это невозможно, по каким-либо причинам загружать только выгружаемые данные в «DataTable». В SQL-Server вы можете использовать функцию ROW_NUMBER. –

+0

Мне потребовались полные данные из БД и внесение преобразования из isfoc в Unicode .. для этого я потребовал все данные. Вместо того, чтобы извлекать все данные за один раз, мы можем получить 1000 лучших 1000 и 1000 таких, как я должен делать. – Santhosh

ответ

0

Есть способ сделать это. Это может быть одно из многих решений. Если позволяет сказать, у вас есть таблица MainTable, создать временную таблицу TempTable следующей

Select Id, ROW_NUMBER() OVER(ORDER BY id) AS RowNum into TempTable from MainTable 

Это создаст ссылку для записи в момент начала работы. Таким образом, если какие-либо записи будут удалены или добавлены, они не нарушат ваш код.

Теперь, в C#, во-первых, получить max(RowNum) и с помощью этого и pageSize вы пишете логику, в которой вы можете выбрать часть ваших записей в расчетном цикле, где вы извлекаете данные следующим образом

Select mt.* from MainTable mt inner join TempTable tt on mt.id = tt.id and tt.rownum between <startRow> and <endRow> 

Где startRow и endRow вычисленные значения. Возвращение такого запроса может быть не точно размером страницы, которую вы установили, если некоторые строки были удалены во время работы вашего долгосрочного задания. А затем очистите свой темп-стол.