Фон
Итак, у меня есть простой DataQtext LINQ-to-SQL с одной таблицей, содержащей около 900 МБ PDF-документов в поле VARBINARY, а также некоторые другие идентификаторы. DeferredLoadingEnabled
установлено на true
. Смысл кода в том, чтобы экспортировать все документы в PDF-файлы на нашем сервере.
Это не первый раз, когда я делаю массовые "скриптовые" вещи вроде linq-to-sql. Это отличный инструмент для простой итерации по многим записям.
Проблема
Моя проблема - после приблизительно 1400 итераций моего foreach (var c in ctx.Documents)
, который принимает поле Report
и использует File.WriteAllBytes(docName, c.Report.ToArray());
для записи его на диск, я получаю OutOfMemoryException
.
Поскольку это внутренний фрагмент кода, я просто использовал .Skip(1426)
для своего выбора, и он успешно завершился. Излишне говорить, что при наблюдении сбоя моей программы мне действительно не хватало памяти.
Существуют ли хорошие способы избежать этого в будущем или LINQ-to-SQL связано этим ограничением?
Один из возможных ответов Я могу придумать, как установить предел итерации и повторно создавать экземпляр моего DataContext каждые 500 записей или около того. Хотя звучит не очень аккуратно ...