Я пытаюсь вытащить массив данных с большим объемом (1,4 миллиона записей) с сервера SQL и дамп в файл в приложении WinForms. Я попытался сделать это с помощью подкачки, так что я не слишком много занимаюсь памятью, но процесс продолжает расти, так как он работает с памятью. Примерно на 25% он занимал 600 000 К. Неужели я делаю пейджинг неправильно? Могу ли я получить некоторые предложения о том, как увеличить использование памяти?Как уменьшить объем памяти с большими наборами данных в EF5?
var query = (from organizations in ctxObj.Organizations
where organizations.org_type_cd == 1
orderby organizations.org_ID
select organizations);
int recordCount = query.Count();
int skipTo = 0;
int take = 1000;
if (recordCount > 0)
{
while (skipTo < recordCount)
{
if (skipTo + take > recordCount)
take = recordCount - skipTo;
foreach (Organization o in query.Skip(skipTo).Take(take))
{
writeRecord(o);
}
skipTo += take;
}
}
Эта строка 'int recordCount = query.Count();' переносит весь «набор данных» в память. После этого пейджинг не выполняет ничего полезного. –
@KeithPayne Я думаю, что счетчик не возвращает все записи, но выполняет SQL COUNT – Gregoire
@KeithPayne, вызов 'Count' не выводит его в память. Запустите профиль SQL, и вы увидите, что он выполняет скаляр, вычисляя количество в БД, используя SQL. –