2009-08-06 52 views
13

将类标记为可序列化的缺点有哪些?将类标记为可序列化的缺点

我需要将我的asp.net会话保存在数据库中,它要求会话中的对象是可序列化的。

合理。

但事实证明,我所要做的就是用[Serializable]属性来修饰该类,并且它的工作原理,这意味着.NET已经具有使类可序列化的底层基础结构。那么,为什么它不能默认呢?

有什么需要标记它?

回答

28

那么,为什么不能默认它呢?

自动序列化/反序列化可能不足以满足该对象。例如,对象可能包含一个保存本地文件名称,指向内存的指针,共享数组索引等的字段。虽然系统通常可以毫无问题地串行化这些原始值,但反序列化可能很容易导致某些内容那是不可用的。一般来说,系统不可能自行解决这个问题。通过要求您使用Serializable来标记课程,您表示已考虑到这些考虑因素。

-1

就缺点而言,序列化的主要缺点是性能开销(CPU和磁盘)以及通过线路发送时的潜在延迟问题。对安全性可能存在轻微的担忧,因为一般来说,XML序列化是不安全的,因为它仅适用于公共属性和类,迫使您在某些情况下暴露您可能没有的其他属性。当然,如果安全真的是一个问题,你可能不会在会话中存储过于敏感的数据。

如果您使用Silverlight,一个潜在的缺点是Silverlight不支持[Serializable]属性,所以用它装饰的任何类都将无法用于您的Silverlight程序集。

这就是说,对于会话管理,存储在ASPState数据库中的小对象通常在内存会话中没有任何明显差异的情况下执行得很好。在频谱的另一端,我有大对象,其他对象的列表属性等,如果它们足够大,性能影响有时会显着。

+3

xml序列化在这里是一个非问题......它在这个上下文中没有使用,并且与[[Serializable]无关) – 2009-08-06 04:12:16

相关问题