将类标记为Serializable的缺点

将类标记为可序列化有什么缺点?

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

合理。

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

有什么需要标记它?

那么为什么不能默认呢?

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

在缺点方面,序列化的主要缺点是性能开销(CPU和磁盘)以及通过线路发送时潜在的延迟问题。 可能存在轻微的安全问题,因为通常,XML序列化是不安全的,因为它仅适用于公共属性和类,在某些情况下会强制您使用您可能没有的公开属性。 当然,如果安全性确实是一个问题,那么您可能不会在会话中存储过于敏感的数据。

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

也就是说,对于会话管理,存储在ASPState数据库中的小对象通常执行得很好而在内存会话中没有任何明显的差别。 在频谱的另一端,我有大型对象,其他对象的列表作为属性等,如果它们足够大,性能命中有时会很明显。