当前位置 : 主页 > 网络安全 > 测试自动化 >

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

来源:互联网 收集:自由互联 发布时间:2021-06-22
我从数据库中读取了一个包含超过100万条记录的表.我需要3分钟才能在内存中填充对象.我想优化此过程,并使用二进制BinaryFormatter将此对象序列化为文件.它创建了一个1/2 GB大小的文件.我
我从数据库中读取了一个包含超过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);
        ...
    }
由于Binary Serializer的工作方式,它很慢.它将大量基于反射的元数据注入到二进制文件中.几年前我对一些相当大的结构进行了一些测试,发现XMLSerializer比二进制序列化器更小更快.去搞清楚!

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

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

你可能想考虑做那样的事情.

网友评论