части коды я работаю получаетПеребор Linq-на-Сущность IEnumerable причины OutOfMemoryException
IEnumerable<T> items
, где каждый элемент содержит класс со свойствами, отражающих таблицу базы данных MSSQL.
Таблица базы данных имеет общее количество 953664 строк. Набор данных в коде отфильтрован до набора из 284360 строк.
Следующий код генерирует исключение OutOfMemoryException, когда процесс достигает примерно 1,5 ГБ памяти.
private static void Save<T>(IEnumerable<T> items, IList<IDataWriter> dataWriters, IEnumerable<PropertyColumn> columns) where T : MyTableClass
{
foreach (var item in items)
{
}
}
Переменная элементы имеет тип
IQueryable<MyTableClass>
Я не могу найти кого-нибудь с такой же установкой, и друга решения, которые я нашел здесь не действует.
Я также пробовал пейджинг, используя Skip и Take с размером страницы 500, но это занимает много времени и заканчивается тем же результатом. Кажется, что объекты не выпускаются после каждой итерации. Как так?
Как я могу переписать этот код, чтобы справиться с большим набором коллекций?
Вы должны * абсолютно * разбивать страницы на страницы, если у вас есть много элементов для работы. Мы не могли бы рассказать вам, как вы все еще держите ссылки на объект в * коде, который вы даже не указали *. – Servy
@Servy Что именно вам не хватает? Переменная элементов - это IQueryable, так что, например, items.count() поместит весь запрос в память. – smarty
Если вы разбиваете на страницы, это не будет, нет. Вы должны иметь возможность предоставить пример, способный реплицировать проблему, при которой вы разбиваете запрос на запрос и показываете, что элементы не будут исправлены после того, как вы закончили с данной страницей. – Servy