【发布时间】:2016-10-17 11:10:44
【问题描述】:
我必须在 csv 文件中写入大数据 (12L) 记录。我正在使用 Streamwriter 写入文件,但在大约 6L 记录后它给了我内存不足的错误。
我也是直接在服务器上写这个文件,有什么办法可以比以后在浏览器上下载这个文件吗?
这是我的代码: searchResult.Entities=是一个EntityObject列表
using (StreamWriter fs = new StreamWriter
(new FileStream("Temp.csv", FileMode.Create)))
{
AddText(fs, headerString.ToString());
foreach (var org in searchResult.Entities.ToList())
{
StringBuilder sb = new StringBuilder();
appendText(sb, org.Id);
appendText(sb, org.LeadNo.HasValue ? org.LeadNo.Value.ToString() : "");
fs.WriteLine(sb.ToString());
foreach (var activity in org.Activities)
{
var activityString = new StringBuilder();
activityString.Append(" , , , , , , , , , , , , , , , , , ,");
appendText(activityString, org.Id);
appendText(activityString, org.LeadNo.HasValue ? org.LeadNo.Value.ToString() : "");
fs.WriteLine(activityString.ToString());
}
}
从数据库中获取所有结果到对象只需要 100ms,但写入文件对于 6L 记录大约需要 1 分钟。
【问题讨论】:
-
也许这会对你有所帮助:stackoverflow.com/a/9643111/4610605
-
我可能认为问题不在 StreamWriter 中,而是在强制将所有数据加载到内存中的以下行中:“searchResult.Entities.ToList()”
-
您是否尝试过使用 Linq2CSV 之类的库?它为您处理了许多边缘情况(例如,如果您的某个字段包含逗号,您会怎么做),并且可能会更高效。
-
请使用英制单位。什么是“L”记录?
标签: c# export-to-csv