二进制格式的性能在64位应用程序中降级

时间:2015-12-16 16:03:44

标签: c# performance binaryformatter

我正在将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;
    }
}

EDIT1

复杂的对象网络被序列化,最终流的长度约为3 MB。

分析结果:

  • 32位 - 平均1,382 ms
  • 64位 - 平均13,214 ms

0 个答案:

没有答案