In agreement with the previous comment, when I serialise a simple class
public class Person
{
public string Name { get; set; }
}
The initial call to MessagePackSerializer.Get takes several hundred milliseconds (somewhere between 350ms to 400ms) and the first call to MessagePackSerializer.Unpack() takes a further 30ms~ or so.
Subsequent calls to both MessagePackSerializer.Pack() and MessagePackSerializer.Unpack() are fast.
The delay only seems to happen when the program first runs. I assume this behaviour is by-design, but is there a way to work around, or at least reduce the "slow start" behaviour?
Tested on MSgPack.Cli v1.0.0 targeting .NET Framework 4.5.
Code to reproduce:
using System;
using System.Diagnostics;
using System.IO;
using MsgPack.Serialization;
namespace ConsoleApp1
{
public static class Program
{
static void Main()
{
Sw.Start();
Console.WriteLine($"{Sw.ElapsedMilliseconds}ms");
// create serializer
var serializer = MessagePackSerializer.Get<Person>();
Console.WriteLine($"{Sw.ElapsedMilliseconds}ms");
for (var i = 0; i < 5; i++)
{
var msgpack = Serialise(serializer, new Person { Name = "Bob" });
var person = Deserialise(serializer, msgpack);
Console.WriteLine($"{Sw.ElapsedMilliseconds}ms {person.Name}");
}
Console.ReadLine();
}
static byte[] Serialise(MessagePackSerializer serializer, Person person)
{
using (var stream = new MemoryStream())
{
serializer.Pack(stream, person);
return stream.ToArray();
}
}
static Person Deserialise(MessagePackSerializer serializer, byte[] packedBytes)
{
using (var stream = new MemoryStream(packedBytes))
{
return (Person) serializer.Unpack(stream);
}
}
static readonly Stopwatch Sw = new Stopwatch();
}
public class Person
{
public string Name { get; set; }
}
}
Example output:
0ms <- application starts, executes MessagePackSerializer.Get<Person>()
341ms <- MessagePackSerializer.Get() returns after 341ms
374ms Bob <- First call to MessagePackSerializer.Pack() has a slight delay
374ms Bob <- Subsequent calls to MessagePackSerializer.Pack() complete quickly.
374ms Bob
374ms Bob
374ms Bob
Is there anything I can do to reduce this initial time calls to MessagePackSerializer.Get() take?
See also #191
Thanks!
In agreement with the previous comment, when I serialise a simple class
The initial call to
MessagePackSerializer.Gettakes several hundred milliseconds (somewhere between 350ms to 400ms) and the first call toMessagePackSerializer.Unpack()takes a further 30ms~ or so.Subsequent calls to both
MessagePackSerializer.Pack()andMessagePackSerializer.Unpack()are fast.The delay only seems to happen when the program first runs. I assume this behaviour is by-design, but is there a way to work around, or at least reduce the "slow start" behaviour?
Tested on
MSgPack.Cli v1.0.0targeting .NET Framework 4.5.Code to reproduce:
Example output:
Is there anything I can do to reduce this initial time calls to
MessagePackSerializer.Get()take?See also #191
Thanks!