我正在将32位应用程序迁移到64位应用程序。通过分析,我发现在64位环境中BinaryFormatter
遭受了巨大的性能损失。
Q1 首先,这种大规模性能下降的原因是什么?
Q2 我该如何规避这个问题?
public override T Load<T>(string blobName)
{
T result = default(T);
using (MemoryMappedFile mmf = MemoryMappedFile.OpenExisting(blobName))
{
using (var stream = mmf.CreateViewStream())
{
var stopWatch = new Stopwatch();
stopWatch.Start();
IFormatter formatter = new BinaryFormatter();
result = (T)formatter.Deserialize(stream);
stopWatch.Stop();
Trace.WriteLine("Deserialize: " + stopWatch.Elapsed.Milliseconds);
}
return result;
}
}
复杂的对象网络被序列化,最终流的长度约为3 MB。
分析结果: