【问题标题】:How to write large data into file c#如何将大数据写入文件c#
【发布时间】: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


【解决方案1】:

您可以尝试不要访问所有属性

foreach (var org in searchResult.Entities.ToList()) //Change this

但只是您需要的:

var toItrate = searchResult.Entities.Select(s => new { Id = s.Id, LeadNo = (s.LeadNo.HasValue ? s.LeadNo.Value : String.Empty) }).ToList();

【讨论】:

  • 为什么要使用ToList?写文件时只枚举实体不是更好吗?
猜你喜欢
  • 1970-01-01
  • 2011-02-04
  • 2013-01-23
  • 2010-10-26
  • 1970-01-01
  • 1970-01-01
  • 2017-07-29
  • 2013-05-08
  • 1970-01-01
相关资源
最近更新 更多