gpt4 book ai didi

.net - 反序列化文件中的数据。性能问题

转载 作者:行者123 更新时间:2023-12-03 16:11:10 24 4
gpt4 key购买 nike

我从数据库中读取了一个包含超过 100 万条记录的表。我需要 3 分钟才能在内存中有一个填充对象。我想优化这个过程,并使用二进制 BinaryFormatter 将此对象序列化为一个文件。它创建了一个 1/2 GB 大小的文件。在我将此文件反序列化回内存对象之后。这花了11分钟!

问题:为什么从数据库中读取所有这些数据比从文件中读取要快得多?是否有可能以某种方式优化反序列化过程?

数据库在我做这个测试的同一台机器上。此时没有其他进程占用 CPU 时间。 CPU 有 4 个内核,内存为 40 GB。

编辑:反序列化代码:

    using (FileStream fs = new FileStream(filename, FileMode.Open))
{
var bf = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
var data = (MyType)bf.Deserialize(fs);
...
}

最佳答案

由于二进制序列化程序的工作方式,它非常缓慢。它将大量基于反射的元数据注入(inject)到二进制文件中。几年前我对一些相当大的结构进行了一些测试,发现 XMLSerializer 比二进制序列化器更小更快。去搞清楚!

在任何一种情况下,序列化都是通过反射完成的,这很慢。您可能会考虑自己的序列化机制。

我曾经创建了自己的二进制序列化机制(使用文件写入/读取),它的执行速度比 XML 序列化器快 20 倍,后者的执行速度比二进制序列化器快。它也明显更小。

你可能想考虑做类似的事情。

关于.net - 反序列化文件中的数据。性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1339843/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com