C# 收集和序列化大型集合的最佳方法
所以我收集了一些物品;比如说需要序列化为CSV文件的Person对象 详细说明: 我从数据库中批量获取40k-50k行的数据,这些数据被添加到Person集合中 这总共有超过一百万条记录 我需要将其序列化为csv文件 C语言# 你能提出一个有效的方法来实现这一点吗 编辑:我试过什么了。 我正在使用Dapper获取这些批次的50k记录C# 收集和序列化大型集合的最佳方法,c#,collections,large-data,C#,Collections,Large Data,所以我收集了一些物品;比如说需要序列化为CSV文件的Person对象 详细说明: 我从数据库中批量获取40k-50k行的数据,这些数据被添加到Person集合中 这总共有超过一百万条记录 我需要将其序列化为csv文件 C语言# 你能提出一个有效的方法来实现这一点吗 编辑:我试过什么了。 我正在使用Dapper获取这些批次的50k记录 var p = new DynamicParameters(); p.Add("@RequestId", new Guid("1B1
var p = new DynamicParameters();
p.Add("@RequestId", new Guid("1B139CAB-1D53-467D-A013-03A5DB410937"));
IEnumerable<Person> resultSet = _dbConn.Query<Person>(sql: "FetchPersons", param: p, commandType: CommandType.StoredProcedure);
上述方法是否合适 在不了解实际实现的更多细节的情况下,很难给出一个好的答案,但我可能会这样做:
SqlCommand cmd = ...;
using (SqlDataReader reader = cmd.ExecuteReader())
using (StreamWriter writer = new StreamWriter(outputPath))
{
while (reader.Read())
{
writer.Write("\"");
for (int v = 0; v < reader.FieldCount; v++)
{
if (v > 0)
writer.Write("\",\"");
writer.Write(reader[v]);
}
writer.Write("\"");
writer.WriteLine();
}
}
SqlCommand cmd=。。。;
使用(SqlDataReader=cmd.ExecuteReader())
使用(StreamWriter writer=newstreamwriter(outputPath))
{
while(reader.Read())
{
writer.Write(“\”);
对于(int v=0;v0)
writer.Write(“\”,\”);
作者、作者(读者[v]);
}
writer.Write(“\”);
writer.WriteLine();
}
}
如果需要,您也可以从阅读器中获取标题。您可能还想添加一些转义。您已经尝试了什么?只需打开一个SqlReader,逐个读取记录并立即将其写入文件。或者尝试使用
bcp
工具:
SqlCommand cmd = ...;
using (SqlDataReader reader = cmd.ExecuteReader())
using (StreamWriter writer = new StreamWriter(outputPath))
{
while (reader.Read())
{
writer.Write("\"");
for (int v = 0; v < reader.FieldCount; v++)
{
if (v > 0)
writer.Write("\",\"");
writer.Write(reader[v]);
}
writer.Write("\"");
writer.WriteLine();
}
}