【发布时间】:2014-07-10 03:56:29
【问题描述】:
我的程序中有一个大对象作为输入,我不想每次都初始化它。所以我尝试了Boost对其进行序列化(序列化后对象为13.6 MB)。但是性能不是很好。加载和反序列化它仍然需要大约一分钟。所以我想知道有什么方法可以让这个过程更快吗?我赞赏任何提示或建议!提前谢谢你
这是保存功能:
void mysave(){
dataprepocess dp();//dp is the object i want to save and load
ofstream ofs("dp.dat", ios::binary);
{
boost::archive::binary_oarchive oa(ofs);
// write class instance to archive
oa << dp;
// archive and stream closed when destructors are called
}
cout<<"saving finished"<<endl;
}
这是我的加载函数,
void myload(dataprepocess& dp){
ifstream ifs1("dp_b.dat", ios::binary);
{
boost::archive::binary_iarchive ia1(ifs1);
ia1 >> dp;
}
ifs1.close();
}
我已经尝试过 text_archive 和 binary_arhive 并且证明它们在性能上没有太大差异。
【问题讨论】:
-
由于极度缺乏细节,很难说比预先计算和测量更多。预先计算的东西。衡量时间花在哪里(i/o?动态分配?连接事物?)。
-
您可以通过在处理用户交互的线程中提供响应性并在后台线程中进行序列化/反序列化来给人一种速度的错觉。
标签: c++ serialization boost load deserialization