Git Product home page Git Product logo

Comments (6)

 avatar commented on April 28, 2024

+= does an append, which is similar in performance to appending to a std::vector, and the fastest way to do string concatenation as far as I know (certainly better than ostringstream).

Why would it be copying the entire string? It typically only reallocates every power of two in size.

from flatbuffers.

bvgastel avatar bvgastel commented on April 28, 2024

Profiling a similar case showed a lot of overhead, but maybe it is 'just' the doubling of the buffer each time, instead of reallocing each time something is appended. Or I was confused about the exact meaning of +=.

But there is still an optimization opportunity here: is there any way to estimate a reasonable amount of bytes beforehand to minimize the number of realloc needed?

Also I would like to see the option to direct output it to std::cout.

from flatbuffers.

 avatar commented on April 28, 2024

FlatBuffers is a very performance-conscious libary. That said, I don't think these reallocs will cause performance problems, even when generating large amounts of JSON. You could probably estimate an ideal buffer size given the size of the input FlatBuffer you're generating from.. this is something I could add, but I don't think it will make much of a difference.

If you want to output to cout, first generating the whole string would still be faster than calling cout for every substring.

from flatbuffers.

bvgastel avatar bvgastel commented on April 28, 2024

I agree. I was confused and too quick to judge. My apologies.

I still would like to see a streaming API to deal with large datasets on memory constrained systems (both reading and writing), maybe I will open a different ticket for it (as it not performance related).

from flatbuffers.

 avatar commented on April 28, 2024

You're right, it would be useful for that. Though I would hope that if you program for a memory constrained system, you don't use the text representation at all, and work with binary only.

from flatbuffers.

bvgastel avatar bvgastel commented on April 28, 2024

I have one project that depends on an external JSON REST API, which sends over 1.5 Mb of decompressed JSON. The devices that should be supported are Android phones with 20 Mb of heap space available (so a continuous block of 1.5 Mb is almost impossible). Only because of the streaming APIs it is possible to even run on such devices. I can also imagine the use on constrained embedded systems like Arduino.

from flatbuffers.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.