【发布时间】:2009-04-11 12:49:48
【问题描述】:
我正在通过 Boost.Serialization 反序列化大量数据(每帧一个)。但是,当我输出反序列化需要多长时间时,它变化很大。目前它并不是非常慢,但让它更快会很好。数据代表相同的类、数组、映射和向量,只是具有不同的值。
看到每次反序列化发生时内存激增,我必须相信有比不断分配和释放所有这些内存更好的方法。
以下是几个读取时间的例子:
Deserialization - 390 milliseconds
Deserialization - 422 milliseconds
Deserialization - 422 milliseconds
Deserialization - 422 milliseconds
Deserialization - 438 milliseconds
Deserialization - 2156 milliseconds
Deserialization - 1797 milliseconds
Deserialization - 1656 milliseconds
Deserialization - 1328 milliseconds
Deserialization - 1219 milliseconds
Deserialization - 1078 milliseconds
Deserialization - 1078 milliseconds
有没有一种方法可以为使用 Boost.Serialization 的相同数据编写自定义反序列化函数,以便我可以指定在开始时分配内存,然后只为每一帧更改它们的值?
更新:我意识到我使用的优化标志的一个小问题是导致序列化数据写入不正确,从而导致反序列化时间不一致。修复此问题后,它现在始终保持在每帧 750 - 780 毫秒。
但是,我最初的问题仍然存在,因为目前我正在序列化和反序列化整个 stl 容器,而我真的只想序列化内容(因为容器的大小和索引将保持完全相同)。不过,我不确定执行此操作的最佳方法。
【问题讨论】:
-
什么框架?可能是视频?此外,各个帧反序列化时间是否可重复运行?另外,您是从硬盘还是内存读取输入?如果是前者,那么硬盘寻道时间以及帧是否已被缓存可能会支配其他一切。
-
基本上是视频帧(尽管它实际上代表数据)。请参阅我对问题的更新。关于输入,它都是从磁盘序列化和反序列化的。也许在遍历帧之前将数据从磁盘初始传输到内存会有所帮助。
标签: c++ optimization serialization boost