Доброе утро!
На самом деле я немного поиграюсь с EF atm и мне нужна помощь ваших парней:
Следующий сценарий: у меня есть таблица с большим количеством данных в нем. Если я запрашиваю эту таблицу через EF, все записи загружаются в память.
например.
var counter = default(int);
using (var myEntities = new MyEntities())
{
foreach (var record in myEntities.MySpecialTable)
{
counter++;
}
}
Итак, я просматриваю все записи MySpecialTable и считаю counter
.
Когда я смотрю на Taskmanager или что-то еще, что показывает потребление памяти моим приложением, оно говорит мне: 400Mb. (из-за данных)
Если я в следующий раз выполню таблицу, потребление памяти увеличится вдвое.
Я уже пытался позвонить в GC, но это не сработает.
Почему все записи каждого прогона хранятся где-то в памяти (и не освобождаются)?
Где они хранятся?
Есть ли способ заставить EF-запросы вести себя как DataReader?
Или есть какой-нибудь другой ORM, такой же элегантный, как EF?
редактирование:
нет, я не делаю такой подсчет ... это просто для показа итерации:)