3 回答

TA貢獻1880條經(jīng)驗 獲得超4個贊
我已經(jīng)修改了@Marc的基準(zhǔn)測試源代碼,并為ServiceStack的JSV和JSON序列化器添加了結(jié)果。這是我的3yo iMac上的結(jié)果:
BinaryFormatter
Length: 1313
Serialize: 3959
Deserialize: 3395
XmlSerializer
Length: 1049
Serialize: 1710
Deserialize: 2716
DataContractSerializer
Length: 911
Serialize: 712
Deserialize: 2117
NetDataContractSerializer
Length: 1138
Serialize: 1093
Deserialize: 4825
TypeSerializer
Length: 431
Serialize: 496
Deserialize: 887
JsonSerializer
Length: 507
Serialize: 558
Deserialize: 1213
這是我添加到上述@Marc基準(zhǔn)中的源代碼。
GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced);
GC.WaitForPendingFinalizers();
var sbJsv = new StringBuilder(4096);
using (var sw = new StringWriter(sbJsv))
{
Console.WriteLine();
Console.WriteLine(typeof(TypeSerializer).Name);
TypeSerializer.SerializeToWriter(orig, sw);
var jsv = sbJsv.ToString();
Console.WriteLine("Length: " + sbJsv.Length);
TypeSerializer.DeserializeFromString<Game>(jsv);
var watch = Stopwatch.StartNew();
for (int i = 0; i < LOOP; i++)
{
sbJsv.Length = 0;
TypeSerializer.SerializeToWriter(orig, sw);
}
watch.Stop();
Console.WriteLine("Serialize: " + watch.ElapsedMilliseconds);
watch = Stopwatch.StartNew();
for (int i = 0; i < LOOP; i++)
{
TypeSerializer.DeserializeFromString<Game>(jsv);
}
watch.Stop();
Console.WriteLine("Deserialize: " + watch.ElapsedMilliseconds);
}
GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced);
GC.WaitForPendingFinalizers();
var sbJson = new StringBuilder(4096);
using (var sw = new StringWriter(sbJson))
{
Console.WriteLine();
Console.WriteLine(typeof(JsonSerializer).Name);
JsonSerializer.SerializeToWriter(orig, sw);
var json = sbJson.ToString();
Console.WriteLine("Length: " + sbJson.Length);
JsonSerializer.DeserializeFromString<Game>(json);
var watch = Stopwatch.StartNew();
for (int i = 0; i < LOOP; i++)
{
sbJson.Length = 0;
JsonSerializer.SerializeToWriter(orig, sw);
}
watch.Stop();
Console.WriteLine("Serialize: " + watch.ElapsedMilliseconds);
watch = Stopwatch.StartNew();
for (int i = 0; i < LOOP; i++)
{
JsonSerializer.DeserializeFromString<Game>(json);
}
watch.Stop();
Console.WriteLine("Deserialize: " + watch.ElapsedMilliseconds);
}
注意:我無法獲得他使用的@Marc的protobuf-net v2 r352 dll,因此我不得不將protobuf-net基準(zhǔn)測試注釋掉。
- 3 回答
- 0 關(guān)注
- 657 瀏覽
添加回答
舉報