【发布时间】:2013-08-07 08:22:43
【问题描述】:
我正在使用 boost 属性树来加载/转储 json 文件。但是,性能很差。
例如,我有一个大小为 1.8M 的 json 文件。 boost C++程序花费3秒加载json文件并构建属性树。如果我使用 python 加载 json 文件,它只需要 0.1 秒。而且python也会把所有东西都构造成对象。
C++程序是这样的:
int main(int argc, char **argv){
std::fstream fin;
fin.open(argv[1], std::fstream::in);
if (!fin.is_open()){
ASSERT(false);
}
boost::property_tree::ptree pt;
try{
read_json(fin, pt);
}catch(ptree_error & e) {
ASSERT(false);
}
fin.close();
return 0;
}
做同样事情的python脚本是这样的:
#!/usr/bin//python
import sys
import json
fp = open(sys.argv[1],"r")
objs = json.load(fp)
我尝试了最新的提升 (1.54)。这样做仍然很慢。
感谢任何建议。
如果没有解决方案,你知道任何其他 C++ 库来加载/转储 json 吗?
【问题讨论】:
-
你是如何编译你的 C++ 程序的?你开启优化了吗?
-
编译时优化了。
-
你有没有分析过 C++ 程序大部分时间花在哪里?即使像
strace这样简单的事情也可能会显示出一些潜在的瓶颈。 -
是的,我实际上有一个由 collect 生成的配置文件。但我还不是很明白。 dl.dropboxusercontent.com/u/623030/boost_json.collect.incl.txt
-
您介意提供您要解析的文件(或类似文件)吗?
标签: c++ json boost boost-propertytree