我运行了我的应用程序两次(在 VS ide 中)。第一次用了 33 秒。我取消了 obj.save 的注释,它调用了很多代码并且花了 87 秒。那是一些缓慢的序列化代码!我怀疑有两个问题。首先是我做以下
template<class T> void Save_IntX(ostream& o, T v){ o.write((char*)&v,sizeof(T)); }
我把这个模板调用了几十万次(也许没那么多)。每个 .write() 是否使用可能会减慢速度的锁?也许我可以使用不需要锁定的内存蒸汽并转储它?我可以使用哪个不锁定的 ostream 并且可能取决于它仅在单个线程中使用?
另一个可疑的问题是我经常使用 dynamic_cast。但我不确定我是否可以解决这个问题。
这是将其转换为使用 fopen 而不是 ostream 后的快速分析会话。我想知道为什么我没有在这个列表中看到我的大部分函数,但正如你所看到的,write 仍然花费了最长的时间。注意:我只是意识到我的输出文件是半个演出。哎呀。也许这就是原因。