Мое приложение должно экспортировать результат хранимой процедуры в формат .csv. По сути, клиент выполняет запрос, и он может видеть результаты в разбитой на страницы сетке, если она содержит то, что он хочет, затем он нажимает кнопку «Экспорт в CSV» и загружает все это.
Сервер должен запустить хранимую процедуру, которая вернет полный результат без подкачки страниц, создаст файл и вернет его пользователю.
Файл результатов может быть очень большим, поэтому мне интересно, как лучше всего создать этот файл на сервере по требованию и предоставить его клиенту без разрыва памяти или ресурсов сервера.
Самый простой способ : вызвать хранимую процедуру с помощью LINQ, создать поток и выполнить итерацию по коллекции результатов и создать строку в файле для каждого элемента коллекции.
Проблема 1: Относится ли отложенное выполнение также к LINQ для хранимых процедур? (Я имею в виду, будет ли .NET пытаться создать коллекцию со всеми элементами в наборе результатов в памяти? Или он выдаст мне результат за элементом, если я выполню итерацию вместо .ToArray
?)
Проблема 2. Сохраняется ли этот поток в оперативной памяти до тех пор, пока я не выполню .Dispose
/ .Close
?
Не очень простой способ : вызывать хранимую процедуру с IDataReader и для каждой строки записывать непосредственно в поток ответов HTTP. Это похоже на хороший подход, пока я читаю, я пишу в ответ, память не взорвалась.
Это действительно того стоит?
Надеюсь, я правильно объяснил.
Заранее спасибо.