0

我正在尝试使用 Controller.File 方法将大型 .csv 文件作为操作结果返回,并且它要求我使用 abyte[]或 Stream。

使用GetBytes方法时,我得到一个OutOfMemoryException.

有没有办法做到这一点而不试图同时把它全部放在内存中?

这是我目前使用的回报:

string csv = data.ToCsv();
return File(Encoding.UTF8.GetBytes(csv), "text/csv", "ClusterFMCacheExport.csv");
4

3 回答 3

2

你试过这个吗?

using(MemoryStream stream = new MemoryStream())
using(StreamWriter writer = new StreamWriter(stream))
{
    writer.Write(s);
    writer.Flush();
    stream.Position = 0;
    return File(stream, "text/csv", "ClusterFMCacheExport.csv");
}

如果您的数据真的那么大,这可能无济于事。如果您生成一个非常大的 csv 文件,我建议您重新编写ToCsv()generate astream而不是 a string

于 2013-03-20T14:48:20.633 回答
0

有一段时间没有使用 ASP.NET,但不应该这样工作(假设该文件已经在磁盘上):

FileStream fs = ... // stream over your csv file, however you get it
return File(fs, "application/csv", "file.csv");
于 2013-03-20T14:44:01.107 回答
0

不会:

Response.AddHeader("content-disposition", "attachment;filename=file.csv");
return Content(csv, "application/csv");

avoid the conversion? It might just kick it down the road though, only for the OOME to re-emerge elsewhere.

于 2013-03-20T14:49:28.133 回答