将大 CSV 文件显示为表格
Displayiing BIG CSV File as Table
我想读取一个包含csv数据(>1 GB,从ERP系统导出(的大文件,并为数据提供一个表格界面。
事实上,我有一个很好的工作台课。这以这种(抽象(方式工作:
- 作为列数据的向量的表行
- 行的向量。
要读取大文件,这会出现内存问题,我认为是因为向量确实需要一次堆上的整个内存。所以我创建了一个新类,其中只有指向列中字符串的指针,如下所示:
- 表行,它是列数据的
vector<string *>
- 行的
vector<row>
。
这样效果更好。它在堆上的内存占用量减少了大约 1/3。我认为分离的字符串数据适合堆上的一些孔;-(
但是,如果数据变大,内存问题也就存在。
要读取文件并进行转换,大约需要 2 分钟。
我尝试了SQLLite,但导入速度非常慢。读取大文件(约 3000000 行(并插入它们,大约需要 15 个小时。我知道我可以大大加快速度,但我真的不知道这是否是解决方案。顺便说一句:sqlite浏览器在导入这样的文件时崩溃!
还有其他人有这样的问题吗,或者你知道管理这种大数据表内存的好方法吗?该表是某些任务的查找表,因此如果可能的话,它应该立即放入内存中。
目前,我正在使用Visual Studio C++ 2012。
在不太了解您的问题的情况下,当我在 10 年前遇到类似情况并且需要 36 小时转储到 Oracle 数据库时,我会这样做,这减少了一半多,达到 16 小时:
创建一堆缓冲区(例如 10,000 行数据(,并让一个线程以循环方式将数据读入这些缓冲区。
然后让另一个线程开始实际处理数据。
诚然,这仅在每一行都独立于其他行时才有效。
编辑:这个关于内存位置的链接可能会有所帮助。本质上使用[]
而不是vectors
。
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 字符串-C++后显示的随机字符
- 继承期间显示未知行为的子类
- 仅使用绝对值对数组进行排序,并在C++中显示实际值
- 程序崩溃并显示"std::out_of_range"错误
- 如何在C++中用std::cout正确显示带十六进制的字符串文本
- 为什么在C的循环中使用printf的Rust代码不显示输出,而在C++的循环中显示std::cout
- 从数据库实时显示QT c++中的数据
- 当使用比格式支持的精度更高的精度来显示数字时,会写出什么数据
- 显示错误输出的简单数组排序程序
- Qt自定义QPush按钮未显示在布局上
- C++射线示踪剂ppm表示没有足够的数据来显示图像
- 显示基于用户输入的整数的字符
- 使用QTreeView,如何通过调用函数只突出显示特定的行/列
- 从文本文件中读取尺寸和表格内容后显示表格
- 将数组显示为表格
- 在Qt中以列表或表格的形式动态显示多个图像的最佳方法
- 如何不仅要求动态2D阵列的行数和列数,还要求以表格格式显示
- 将大 CSV 文件显示为表格