【问题标题】:Best approach to collect and serialize large collections [closed]收集和序列化大型集合的最佳方法 [关闭]
【发布时间】:2014-10-08 22:04:28
【问题描述】:

所以我有一个对象集合;说需要序列化为 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();
                    }

上述方法合适吗?

【问题讨论】:

标签: c# collections large-data


【解决方案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();
    }
}

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

【讨论】:

    猜你喜欢
    • 2018-08-20
    • 2013-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-04
    • 2014-01-23
    • 2020-04-17
    相关资源
    最近更新 更多