On Wednesday, 18 April 2012 at 15:02:39 UTC, Andrej Mitrovic wrote:
On 4/18/12, Masahiro Nakagawa <repeate...@gmail.com> wrote:
You can use direct-conversion deserialize

     Foo foo2;
     msgpack.unpack(data, foo2);

instead of

     msgpack.unpack(data).as!(typeof(foo));

I tested your code on my Mac.
Direct-conversion deserialize is 2x or 3x faster.

Wow, I had no idea there was a direct-conversion routine.

On my machine here's the results, first the indirect conversion:
globals.d(358): saved headers in 2327 msecs
globals.d(364): loaded headers in 82058 msecs

then the direct conversion:
globals.d(358): saved headers in 2581 msecs
globals.d(364): loaded headers in 4260 msecs

That's almost a 20x speed improvement! Fantastic, this solves my
problems!

I'm glad to hear that :)
But deserialization is still slower than serialization.
I will try to improve the performance.

But what exactly is the difference between the two
deserialization routines except the speed itself?

The main reason is the backward compatibility.
First implementation of msgpack-d didn't have the direct-conversion deserializer.

Yes, msgpack.unpack isn't a streaming deserialization,
so msgpack.unpack for streaming deserializer is not needed.

I plan to clean up the API, but I need some more time.

Reply via email to