收集和序列化大型集合的最佳方法
本文关键字:最佳 方法 集合 大型 序列化 | 更新日期: 2023-09-27 18:18:11
我有一个对象集合;比如Person对象,它需要序列化为CSV文件。
阐述:我从数据库中以40k-50k行的批量获取数据,这些数据被添加到Person集合中这总共有100多万条记录我需要把它序列化成csv文件
语言c#你能建议一个有效的方法来实现这一点吗?
编辑:我试过什么了。我使用Dapper来获取这些批次的50k条记录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);
一旦我将这些元素取出到集合中,我将执行以下操作:
using (TextWriter writer = File.CreateText(@"outPutFile.csv"))
{
foreach (Person person in personColl)
{
writer.WriteLine(person.FirstName + "," + person.LastName + "," + person.Param1 + "," + person.Param2 + "," + person.Param3);
}
writer.Flush();
}
上述方法合适吗?
在不了解实际实现的更多细节的情况下,很难给出一个好的答案,但我可能会这样做:
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();
}
}
如果需要,也可以从阅读器中获取标题。您可能还需要添加一些转义