收集和序列化大型集合的最佳方法

本文关键字:最佳 方法 集合 大型 序列化 | 更新日期: 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();
    }
}

如果需要,也可以从阅读器中获取标题。您可能还需要添加一些转义