作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Json::Value 位于:
#include <json/value.h>
我有一个正在创建的 Json::Value 对象,它将被推送回给用户。它的问题是它需要很长时间才能完成,这让我很困惑。
我认为 Json::Value 有问题,也许在赋值时,我应该存储一个地址以有效地创建指针。现在,我看到类似这样的内容:
//C++11
Json::Value a;
Json::Value b;
Json::Value c;
for ( /* interator over array*/){
Json::Value d;
d = iterator;
a.append(d);
}
b["features"] = a; //this line takes 1.06 seconds to do.
for ( /*iterator for another array*/){
Json::Value e;
e = iterator;
c.append(e);
}
b["class"] = c; //this line takes 2.817 seconds.
我正在尝试找出确切的规范,但我相当确定每个标记的项目都可能在做硬拷贝。我正在考虑让它更快,因为该项目已经创建,指针会很有用,但我不确定这里发生了什么的细节。为什么这些电话需要这么长时间?是否有替代方法来创建这些 json 对象,因为它们已经存在,或者是否需要花费尽可能长的时间?
我的最终目标是优化这组代码,因为我觉得这些变量赋值应该更快。
最佳答案
假设您正在使用 JsonCpp。
你想要做的是:
b["features"] = std::move(a);
这将移动分配 Value
而不是复制分配它。不幸的是,该类没有声明移动赋值运算符,也不会隐式生成。
幸运的是,该类定义了一个 swap
函数,您可以使用它来防止复制。
b["features"].swap(a);
关于c++ - 我认为与将值作为键相比,将 JsonValue 值分配给 JsonValues 可能会非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30873980/
java.lang.Throwable 的哪些子类可能被空语句抛出? 通过短语“空语句”,我指的是“无”、“分号”和“分号”: // .... A(); B(); C(); try { //
我是一名优秀的程序员,十分优秀!