![]() |
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版本中可能的改进进行了解释 |
![]() |
Emopusta · 从后端到前端的图像路径不工作 2 年前 |
![]() |
Asdrubal Hernandez · Linq查询特定数组索引出错 2 年前 |
![]() |
Niyazi Babayev · 如何在表达式中动态应用表达式? 2 年前 |
|
Dansih · .Net核心自定义身份验证方案 2 年前 |
![]() |
lolorekkk · 面板插入。NET WinForm 2 年前 |