使用BinaryFormatter进行序列化*性能*问题

时间:2011-04-07 13:01:55

标签: .net performance serialization binaryformatter

背景:

我坚持使用LARGE对象图,它被序列化为大约60MB的文件(随着时间的推移会增长)。问题不是文件大小,而是写入和阅读时间,在某些机器上最多可达4分钟。

简介:

由于这代表某种内存数据库,我可以延迟加载其中一些。

兴奋:

如何衡量特定对象块的加载时间?我是否记录构造函数调用并从那里开始?还有更好的主意吗?

编辑:

我宁愿不谈论序列化的替代方案,关于该主题有很多帖子,我宁愿调查为什么它如此缓慢以及对象图的哪一部分是'切除'和延迟加载的良好候选者。

2 个答案:

答案 0 :(得分:1)

您可以尝试protobuf.NET报告更快。

答案 1 :(得分:0)

我会考虑使用SQL Server Compact(来自Microsoft的进程内数据库),而不是序列化大对象图。

我有使用BinaryFormatter将大图表序列化到磁盘的经验。存在与版本控制相关的问题。序列化对象很难维护和使用。使用这些对象通常需要反序列化到内存中。使用大图是一种耗费资源的方式。

而且Sql Server CE非常轻量级,它的组装大约是1Mb。它还处理一些多线程问题。

如果你需要序列化只是为了通过网络或其他什么发送,我认为60Mb是相当大的阵列,转移它可能会有问题。

<强>更新

如果您想使用BinaryFormatter,我认为您可以将图形序列化为不是一个根对象而是作为较小对象的集合。序列化所有对象可能会更慢,但它会让你只序列化某些对象。如果你有异构数组(即不同类型的对象序列),我可以假设对象越复杂,层次越深,序列化的时间就越长。您可以测量相同类型的对象集合的序列化时间。您还可以使用某个分析器来序列化整个图形,大多数分析器会显示哪种方法需要更多时间来执行。