仅从大型数据文件中读取/写入所需的数据,以最大程度地减少内存占用
Reading/writing only needed data to/from a large data file to minimize memory footprint
我目前正在集思广益,一个金融程序将处理(随着时间的推移(相当大量的数据。它将是一个C++/Qt GUI应用程序。
我认为在运行时将所有数据读入内存是不可能的,因为给定足够的数据,它可能会占用太多内存。
我试图想出一种方法来只读取我需要的东西,例如,如果我显示了一个帐户,只显示实际显示的数据(以及任何其他绝对必要的数据(。这样,即使数据文件是 4gb 左右,内存占用也可能保持很小。
我想到了某种搜索功能,它会慢慢地逐行读取文件并找到一个"标签"或标识我想要的特定数据的东西,然后加载它,但考虑到理论上每次有 gui 更新时都会发生这种情况,这似乎是一种可怕的方式。
从本质上讲,我希望能够有效地找到文件中的特定数据,仅将其读入内存,并可能更改它并写回它,而无需每次都读取和写入整个文件。我不是一个有经验的程序员,我在谷歌上搜索想法并不是很成功。
编辑:我可能应该提到我打算使用Qt花哨的QDataStream相关类来存储数据。换句话说,该文件可能是二进制的,并且不像文本文件那样易于逐行搜索。
根据您的评论好的。
从简单开始。暂时忘记您的财政申请,除了作为背景。所以适合您的文件系统的示例
一种数据类型,例如帐户。从固定宽度的列开始,为您提供固定宽度的记录。
一个数据文件有另一个文件用于帐号索引
做插入,更新和删除,你会学到很多。
例如。删除,您可以找到索引和数据,将它们移出并重建两个文件。
您可以在客户记录上有一个内部字段,指示它已被删除,在数据中设置该字段,然后删除索引。后者也是重写整个文件。您可以将删除标志放在索引文件中...插入时是否要追加,是否要查找已删除的记录并重复使用该槽?
您的索引只是账户和头寸的直接列表,还是想要散列它,请使用树。您可以花一周甚至几个月的时间只看索引策略。
无论如何,学习愉快。帮助您解决未来的问题会很有趣。
- 如何通过另一个对象中的命令正确地从一个对象返回数据
- 有效地将数据加载到 std::vector 中<char>
- 调用不在基类中的派生类函数而不进行动态强制转换,以最大程度地提高性能
- 如何动态地为对象中的数据赋值?
- 如何有效地实现将向量的数据分配给多个变量?
- 有没有办法有效地更新QML中的CAN数据?
- 优雅地访问嵌套类中的数据
- 在高数据包速率下最大限度地减少丢弃的 UDP 数据包 (Windows 10)
- 如何有效地读取和存储 1GB 文本文件中的数据
- (C++)如何修改/使用数据结构,以便我们可以一次又一次地使用它们?
- 试图最大程度地减少对每次迭代的原子的检查
- 如何在Qt中进行多个图形更改时最大程度地减少屏幕闪烁
- cpp 中是否存在一种数据结构,可以轻松地提供一种基于已存在的实例构建新结构的方法
- 通过消除琐碎的变化来最大程度地减少git差异
- GTK+ g_pointer_connect错误地传递数据
- 如何在 c++ 和 java 之间通过 udp 有效地发送数据数组
- 如何防止在标题中包含标头,以最大程度地减少包含在其他 CPP 中
- 我是否应该努力负责单一责任或最大程度地减少成员变量的数量
- C++数据无缘无故地变化
- 仅从大型数据文件中读取/写入所需的数据,以最大程度地减少内存占用