【问题标题】:Manipulating large set of CSV data in memory处理内存中的大量 CSV 数据
【发布时间】:2015-07-29 13:16:01
【问题描述】:

我正在尝试操作已导入数据表的大量数据(1000 万条记录)。我不认为数据表是在内存中操作大量数据的最有效方式。有没有人有更好的方法来做到这一点?我正在尝试做的是获取 CSV 文件的内容来处理一些数据并将结果重新导出到另一个 CSV 文件中。

TIA, 保罗

【问题讨论】:

    标签: c# performance datatable


    【解决方案1】:

    DataTable 需要一次将整个内容加载到内存中。不要那样做。而是将输入和输出 csv 文件都视为流。这是一个非常好的 CSV 阅读器,可让您一次阅读和处理一条记录:

    快速 CSV 阅读器

    http://www.codeproject.com/Articles/9258/A-Fast-CSV-Reader

    您想同时打开读取源和写入目标。当您从源读取一行时,对其进行处理,然后写入目标。您的内存中不应超过一行或几行。这在内存使用和性能方面都将更加高效。

    为了获得更高的性能,您可以使用单独的读/写线程和生产者/消费者队列,但这需要更多的管理才能确保队列不会饱和,具体取决于具体情况和相对的读/处理/写性能,这种更复杂的解决方案可能根本不会提高性能。

    【讨论】:

    • 非常感谢。我将尝试实现该模式。如果数据源来自 SQL 查询,你会怎么做。您是否会将数据读入块中,然后使用生产者/消费者模式为您获得的每组数据部分写入数据?
    • @Paul 使用IDataReader 而不是DataTable,您将一次处理一行。一般来说,如果可能,请始终使用数据阅读器,并在不必要时避免使用数据表(但不要不惜一切代价避免,只要使用阅读器足够简单,或者如果您有大量数据)。
    猜你喜欢
    • 2018-03-05
    • 1970-01-01
    • 2016-06-27
    • 2011-07-30
    • 2023-03-24
    • 2017-02-09
    • 1970-01-01
    • 2010-11-03
    相关资源
    最近更新 更多