在自定义序列化期间,每个对象的GetObjectData方法应该多久调用一次?

时间:2010-10-05 15:40:51

标签: .net performance serialization iserializable

我正在使用自定义序列化序列化我的应用中的数据,即我正在存储的每个类都具有[Serializable]属性并实现ISerializable。被序列化的对象图相当复杂,对象/类之间有许多交叉引用。序列化有效,但速度很慢。 :(

通过在每个相关类的GetObjectData方法中放置一个断点,我发现我得到的命中次数比我的对象多得多。

我很困惑 - 我对序列化框架的理解是它只会存储每个对象一次,即使对象图包含多个引用它。我认为这意味着每个对象的GetObjectData方法在保存期间只需要调用一次。我错了吗?

如果是这样,我可以采用这种方法减少对类GetObjectData方法的调用次数吗?

感谢。

1 个答案:

答案 0 :(得分:3)

MSDN docs不保证每个对象实例只有1次调用。

您是否尝试过使用不同的格式化程序?有评论here表明正在进行选定的工作以改进这一点。专门针对Indigo(又名WCF)。

  

不保证这种方法   每个对象只会被调用一次   序列化期间的实例。   因此,方法应该是   以这样的方式实施   无论如何,行为都是一样的   它被呼叫的次数。