2

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

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

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

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

谢谢大家皮特

4

3 回答 3

2

如果您可以将它们全部保存在内存中而不会出现问题,那么就这样做 - 其他一切都将是过早的优化。

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

于 2012-12-17T08:50:49.587 回答
0

仅使用内存的一个主要问题是,如果系统崩溃(无论出于何种原因,不一定是代码错误),那么所有被操纵的对象数据都将丢失。如果您的处理速度快于您可以承受的风险。

如果你想提供一个稳定的系统,它应该是可扩展的,因为你永远不知道你的 20K 航班数据何时会变成 200 万航班数据,你的算法可能需要哪些额外的数据结构(更多的内存空间)等等。对于此类系统,首选存储机制来存储您的系统状态,以防您需要在发生故障后从处理的中间开始。

于 2012-12-17T08:57:48.203 回答
0

磁盘慢得要命,并且不断地加载/卸载将非常复杂。如果你的内存没有用完,而且现在 50MB 对于很多平台来说肯定不是很多,那么请将它们全部保存在内存中。

于 2012-12-17T09:09:22.373 回答