1

背景:

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

阴谋:

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

惊险:

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

编辑:

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

4

2 回答 2

1

您可以尝试protobuf.NET,据报道它更快。

于 2011-04-07T13:07:04.737 回答
0

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

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

并且 Sql Server CE 是相当轻量级的,它的程序集大约是 1Mb。它还处理一些多线程问题。

如果您需要序列化只是为了通过网络或其他方式发送,我想 60Mb 是相当大的数组,传输它可能会出现问题。

更新

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

于 2011-04-07T15:54:06.993 回答