![]() |
1
5
由于二进制序列化程序的工作方式,它的速度非常慢。它将大量基于反射的元数据注入到二进制文件中。几年前,我对一些相当大的结构运行了一些测试,发现XMLSerializer比二进制序列化器更小、更快。想想看吧 在这两种情况下,序列化都是通过反射完成的,这很慢。您可以考虑自己的序列化机制。 我曾经创建了自己的二进制序列化机制(使用文件写入/读取),它的执行速度比XML序列化程序快20倍,后者的执行速度比二进制序列化程序快。它也明显更小。
|
![]() |
2
1
|
![]() |
3
0
我注意到.NET初始化XmlSerializer需要相当长的时间。因此,如果您不重用序列化程序对象,那么这样做应该会显著加快该过程。 |
![]() |
4
0
我发现序列化是一个相当大的开销,我希望从文件中反序列化这么多数据比从数据库中查询要花费更长的时间。您还需要从磁盘上的文件读取数据,因此这也会很昂贵。如果您试图缓存数据,最好查看一些内存选项。 |
![]() |
5
0
我同意布赖恩的观点。如果编写自己的持久性逻辑,则可以消除反射调用的开销,并完全控制如何从磁盘加载数据。您将不得不编写更多的代码,但在这种情况下,这可能是优化的代价。 |
![]() |
6
0
轮廓 注释假定问题是反射,但我现在正在处理一个类似的场景(从文件到对象内存树的反序列化),似乎正在发生的是BinaryFormatter.Deserialize()似乎正在逐个读取字节或小块,以便重新水合对象。
29%Microsoft.Win32.Win32 Native::ReadFile
我想知道是否有一种方法可以告诉BinaryFormatter按块读取ex。尝试了BufferedStream和MemoryStream,但没有成功。。。 |
![]() |
7
0
自从我提出这个问题以来,差不多9年过去了。在.NET二进制序列化程序中没有太多更改,但我找到了另一个库来替换它。 它被称为Slim Serializer,是NFX库的一部分。以下是一些链接:
性能:
问题(11分钟)和答案(3.5分钟)中的二进制序列化程序的性能差异,我通过更好的硬件和.NET版本中可能的改进进行了解释 |
![]() |
Sweepy Dodo · JSON lite的格式化 4 月前 |
![]() |
giantjenga · 优化整数向量到二进制向量的转换 5 月前 |
![]() |
Zegarek · Postgresql递归查询未提供预期结果 6 月前 |
![]() |
Joe · 为什么这两个查询之间的性能存在如此大的差异? 9 月前 |
![]() |
tic-toc-choc · 在`dplyr中高效使用列表进行过滤` 9 月前 |