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

时间:2014-08-15 05:56:14

标签: c# collections large-data

所以我有一组对象;说需要序列化为CSV文件的Person对象。

详细说明: 我从40k-50k行的批次中获取数据,这些行被添加到Person集合中 这总结了一百多万条记录 我需要将其序列化为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();
                    }

上述方法是否合适?

1 个答案:

答案 0 :(得分:1)

如果不了解实际实现的更多细节,真的很难给出一个很好的答案,但我可能只是这样做:

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();
    }
}

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