gpt4 book ai didi

c# - stringbuilder 保存到内存不足的 CSV 文件

转载 作者:行者123 更新时间:2023-11-30 20:37:53 26 4
gpt4 key购买 nike

我需要将一个大型数据表(5000 行和8880 列)保存到 CSV 文件。所以我先将 DataTable 保存到 StringBuilder 并使用 File.WriteAllText 保存到文件。但是由于表的大小,它给了我内存不足异常。我正在考虑使用 StreamWriter。任何人都可以帮助如何使用 StreamWriter 吗?

谢谢!

 StringBuilder sb = new StringBuilder();

string[] CSVcolumnNames = sortedDT.Columns.Cast<DataColumn>().
Select(column => column.ColumnName).
ToArray();
sb.AppendLine(string.Join(",", CSVcolumnNames));

foreach (DataRow row in sortedDT.Rows)
{
string[] fields = row.ItemArray.Select(field => field.ToString()).
ToArray();
sb.AppendLine(string.Join(",", fields));
}

File.WriteAllText(CSVpath, sb.ToString());

最佳答案

不要使用File.WriteAllText(),它需要所有内存中的数据,使用File.WriteAllLines() 而不是(它只需要 一行 的内存):

var source = sortedDT.Rows
.OfType<DataRow>()
.Select(row => String.Join(",", row.ItemArray));

File.WriteAllLines(CSVpath, source);

如您所见,File.WriteAllLines 会为您完成一切,您不必使用 StreamWriter。如果您想添加标题(列名):

var columnNames = String.Join(",", sortedDT.Columns
.OfType<DataColumn>()
.Select(column => column.ColumnName));

var data = sortedDT.Rows
.OfType<DataRow>()
.Select(row => String.Join(",", row.ItemArray));

var source = new String[] {columnNames}
.Concat(data);

File.WriteAllLines(CSVpath, source);

关于c# - stringbuilder 保存到内存不足的 CSV 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35654830/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com