Вероятно, это происходит потому, что ваше приложение пытается построить всю электронную таблицу Excel в памяти и затем доставить ее пользователю, как только это будет завершено. Для больших наборов данных вы можете легко использовать всю доступную память, что, скорее всего, также приводит к резкому замедлению работы приложения для остальных пользователей.
Вместо этого вы можете попробовать передать данные пользователю. При этом будет использоваться один и тот же объем памяти, независимо от размера вашего набора данных. Вы можете получить байты электронной таблицы Excel или просто преобразовать свои данные в CSV, а затем установить тип ответа HTTP и передать его пользователю.
Вот пример:
byte[] reportDoc = GetExportExcel();
context.Response.ContentType = "application/vnd.ms-excel";
//set the content disposition header to force download
context.Response.AddHeader("Content-Disposition", "attachment;filename=" +
"Export.xls");
//write the file content byte array
context.Response.BinaryWrite(reportDoc);
Подробное руководство можно найти на http://bytes.com/topic/asp-net/answers/326796-example-streaming-excel-browser-download