C++ 大型内存对象集合可以吗?

标签 c++ oop

我正在编写一个 C++ 应用程序来分析 IATA SSIM 格式的航类时刻表。航空业集团 IATA 指定了在系统之间传输时刻表的文件布局标准,“SSIM”文件包含有关时刻表及其一家或多家航空公司的所有相应航类的信息。

我设计了一个 Schedule 对象,其中包含 Flight 对象的集合。输入文件中通常有 2,000 - 20,000 个航类, - 生成的对象大小将达到约 50MB。到目前为止,我读取了平面文件,并创建了生成的 Schedule 对象,然后对其进行分析/操作以用于报告目的。

我的问题是 - 从设计角度来看这样做可以吗?当我报告时,应用程序是否将所有航类和时间表对象保留在内存中?另一种方法是将飞行对象序列化在磁盘上,并且仅在需要时才处理内存中的事件记录。这会减少所用内存的大小,但从编码的角度来看显然更麻烦。

我知道没有“标准”方法,但我想知道人们对管理内存中非常大的对象的看法是什么。这是相当标准的设计还是次优的设计?我的偏好是将所有内容保留在内存中,并在不诉诸序列化的情况下处理对象。

谢谢大家 皮特

最佳答案

如果你可以毫无问题地将它们全部保存在内存中,那么就这样做 - 其他一切都将是过早的优化。

要记住的重要一点是,以这样的方式解耦算法和数据结构,以便您稍后可以切换到不同的策略,而无需重写应用程序逻辑。如果您的算法在航类列表上的迭代器上运行,那么您可以稍后更改这些迭代器的逻辑(从内存读取、从磁盘读取),而无需修改您的算法。

关于C++ 大型内存对象集合可以吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13910873/

相关文章:

c++ - 自定义 AVIOContext 的未定义 AVFormatContext 持续时间

c++ - 如何使用 SOCI C++ Database 库?

c++ - Arduino类初始化执行

c# - 处理数据库数据的良好 OOP 设计原则

java - 抽象类避免创建对象的多个实例来传递不同的输入

c++ - OpenCV C++。快速计算混淆矩阵

c++ - 静态 C++ 映射初始化错误 C2552 : non-aggregates cannot be initialized with initializer list

c++ - 我应该将哪个C++库用于利用第三方应用程序的大型并行计算数字处理项目

C#接口(interface)方法歧义

python - python中的链式调用父初始化器