gpt4 book ai didi

c++ - 从 json 文件构建 boost 属性树性能很差?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:40:05 26 4
gpt4 key购买 nike

我正在使用 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)

我尝试了最新的 boost (1.54)。这样做仍然很慢。

感谢任何建议。

如果没有解决方案,您是否知道其他用于加载/转储 json 的 C++ 库?

最佳答案

我们在使用 boost::property_tree 和 JSON 时遇到了严重的性能问题。我们的方法是停止使用 std::string 并使用带有自定义分配器的内部字符串类,以及用于不重新分配相同字符串两次的哈希表。这将大型 JSON 文件的性能和内存使用率 boost 了至少几个数量级。

我们的 JSON 文件足够大,以至于 std::string 分配占用了 32 位机器上的所有可用地址空间。这种方法让我们有余量运行。

关于c++ - 从 json 文件构建 boost 属性树性能很差?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18098273/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com