[Interest] Faster QXmlStreamWriter?

Konstantin Tokarev annulen at yandex.ru
Wed Apr 25 18:55:55 CEST 2018



25.04.2018, 19:08, "Thiago Macieira" <thiago.macieira at intel.com>:
> On Wednesday, 25 April 2018 08:45:41 PDT Thiago Macieira wrote:
>>  On Wednesday, 25 April 2018 07:13:18 PDT Konstantin Tokarev wrote:
>>  > 25.04.2018, 09:43, "Thiago Macieira" <thiago.macieira at intel.com>:
>>  > > So Qt 6 QJsonDocument & family will have the 128 MB limit
>>  > > removed, at the expense of the binary JSON format requiring parsing.
>>  >
>>  > That's sad, as we lose the single solution inside Qt for serialization
>>  > without parsing
>>
>>  That was going to happen anyway, because of the 128 MB size limit. If we did
>>  nothing else, we'd create a new format with a much expanded size limit,
>>  which means the current format would need to be parsed and converted.
>
> By the way, QJsonDocument::fromBinaryData does still perform a correctness
> check, to make sure it won't crash later reading corrupt data. You can skip
> this step and then loading your data is extremely fast.

For example, QtWebChannel implementations in QtWebKit and QtWebEngine
use QJsonDocument as a wire format for exchanging data between processes,
of course validation is skept because producer and consumer are reliable.

>
> Here are my numbers comparing loading that 60+ MB file in both binary JSON
> format (with validation) and CBOR:
>
> Binary JSON:
>          69,844846 task-clock:u (msec)
>        196.906.259 cycles:u
>        422.255.714 instructions:u
> [There's no readAll(); 70.2% of the time is spent inside
> QJsonPrivate::Object::isValid]
>
> JSON:
>         255,809132 task-clock:u (msec)
>        771.771.000 cycles:u
>      2.690.966.058 instructions:u
> [80.2% inside QJsonPrivate::Parser::parseValue, 58.7% inside
> QJsonPrivate::Parser::parseString and 16.3% inside QUtf8Functions::fromUtf8]
>
> CBOR:
>         239,059121 task-clock:u (msec)
>        562.474.857 cycles:u
>      1.431.590.428 instructions:u
> [71.6% inside QCborValue::fromCbor, 65.0% inside
> QCborContainerPrivate::decodeStringFromCbor, 25.5% inside
> QCborStreamReader::readStringChunk plus 12.6% inside QUtf8::isValidUtf8]
>
> So it's just under 4x slower, but we're still talking about consuming over
> 250 MB/s of data.
>
> PS: YMMV, especially if you don't use CPU-optimised UTF-8 methods like I do.
> You need to compile your own Qt to get those.
>
> --
> Thiago Macieira - thiago.macieira (AT) intel.com
>   Software Architect - Intel Open Source Technology Center
>
> _______________________________________________
> Interest mailing list
> Interest at qt-project.org
> http://lists.qt-project.org/mailman/listinfo/interest

-- 
Regards,
Konstantin




More information about the Interest mailing list