将类标记为Serializable的缺点

时间:2009-08-06 03:43:50

标签: c# asp.net

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

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

有道理。

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

有什么需要标记它?

2 个答案:

答案 0 :(得分:30)

  

那么为什么不能默认这样做呢?

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

答案 1 :(得分:-1)

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

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

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

相关问题