从json文件构造boost属性树的性能非常差
performance is very bad to construct boost property tree from json file?
我正在使用boost属性树来加载/转储json文件。然而,性能非常糟糕。
例如,我有一个json文件,其大小为1.8M。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吗?
我们在boost::property_tree和JSON方面遇到了严重的性能问题。我们的方法是停止使用std::string
,并使用带有自定义分配器的内部字符串类和哈希表,以避免两次重新分配同一字符串。这将大型JSON文件的性能和内存使用率提高了至少几个数量级。
我们的JSON文件足够大,std::string分配占用了32位机器上所有可用的地址空间。这种方法让我们有了足够的空间。
我发现vs for Property Tree的Release Build和Debug Build性能数字之间存在巨大差异。在我的特定硬件上,使用read_JSON解析1MB JSON文件在Debug构建中需要8秒,但在发布版本中只需要0.7秒。
JSON文件中的实际内容并不重要。我尝试了使用不同conent的多个JSON文件。助推只是很慢。
现在我已经切换到了jansson,这是更好的-使用API既快捷又好。
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- OpenMP阵列性能较差
- 递归列出所有目录中的C++与Python与Ruby的性能
- 大小相等但成员数量不同的结构之间的性能差异
- OpenGL大的3D纹理(>2GB)非常慢
- 为什么constexpr的性能比正常表达式差
- 为什么需要复制构造函数,在哪些情况下它们非常有用
- 在类中使用随机生成器时出现性能问题
- 为什么std::互斥需要很长的、非常不规则的时间来共享
- 在main()之外初始化std::vector会导致性能下降(多线程)
- G++ C++17 类模板参数推导在非常特殊的情况下不起作用
- 我的自定义使用 std::unordered_map 的性能非常慢
- QtWebengine 5.7.1的性能非常慢
- C++ 中矢量的性能非常糟糕
- 在多线程环境中使用 libcurl 会导致与 DNS 查找相关的性能非常慢
- C 11多线程在神经网络中的性能非常缓慢
- 从json文件构造boost属性树的性能非常差
- STL列表的性能非常差
- QT中的自定义外观svg GUI小部件,性能非常差
- 与这些代码的性能有关?一个非常快,另一个超过了时间限制