miloyip / nativejson-benchmark

C/C++ JSON parser/generator benchmark
MIT License
1.95k stars 262 forks source link

JsonCPP在debug下非常慢,是否也纳入参考? #104

Closed peach5460 closed 5 years ago

peach5460 commented 6 years ago

昨天,我在项目中遇到了一个很匪夷所思的事情。

项目环境: VS2013Update5 Intel(R) Core(TM) i5-7500 CPU @ 3.40GHz 8G内存

jsdoncpp用的是昨天刚从open-source-parsers/jsoncpp下载的1.8.4 分别编译了debug和release的lib做项目依赖。

简化后代码如下:

Json::Value root;
Json::CharReaderBuilder jsreader;
std::istringstream sin(outstr);
std::string err;
if (!Json::parseFromStream(jsreader, sin, &root, &err))
    return false;
return true;

我解析的ourstr有10790107字节长度,在release下jsdoncpp解析还算勉强能接受,内存激涨了150-200M以后,很快就释放了,函数执行结束。 但是在debug下,内存缓慢的增长至400M,然在return true这里,我看着任务管理器里面的内存以每一到两秒一兆的速度释放,人都快崩溃了…… 最终,debug下从parse到return true走完一共花了五到十分钟。 不知道是我的代码写法有问题,还是jsdoncpp本身的问题。这种debug速度我是完全无法接受的。

目前,我已经依据此项目的测试结果作为参考,换一个JSON解析库了。 但是我认为,debug下的性能是否也应该作为一个测试的参考呢? jsdoncpp在release下的性能是勉强OK的,但是在debug下完全没法用,这会导致开发人员根本没办法进行调试。

miloyip commented 6 years ago

一般不会比较 debug 配置的性能。这个 benchmark 也是用尽量最优化的配置去测试。 从这个 benchmark 的结果来看,jsoncpp 的性能应该很一般。

peach5460 commented 6 years ago

嗯,也对。 DEBUG只是程序员用的,发布版本还是以release性能为准。