代码之家  ›  专栏  ›  技术社区  ›  HS.

将类标记为可序列化的缺点

  •  13
  • HS.  · 技术社区  · 16 年前

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

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

    有道理。

    但事实证明,我所要做的就是用 [Serializable] 属性和它起作用,这意味着.NET已经有了使类可序列化的基础结构。那么为什么它不能在默认情况下就这么做呢?

    有什么必要把它标成这样?

    2 回复  |  直到 16 年前
        1
  •  30
  •   Jason Kresowaty    16 年前

    那么为什么它不能在默认情况下就这么做呢?

    对象的自动序列化/反序列化可能不够。例如,对象可能包含一个包含本地文件名的字段、指向内存的指针、指向共享数组的索引等。虽然系统通常可以毫无问题地序列化这些原始值,但反序列化很容易导致一些不可用的内容。一般来说,系统不可能自己解决这个问题。要求你在课堂上 Serializable ,您表示已考虑到这些因素。

        2
  •  -1
  •   PortageMonkey    16 年前

    在缺点方面,序列化的主要缺点是性能开销(CPU和磁盘)以及通过网络发送时可能出现的延迟问题。安全性可能会有一些小问题,因为一般来说,XML序列化是不安全的,因为它只在公共属性和类上工作,在某些情况下会强制您使用可能没有的公开属性。当然,如果安全性真的是一个问题,您可能不会在会话中存储太敏感的数据。

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

    也就是说,对于会话管理,存储在ASPState数据库中的小对象通常执行得很好,与内存会话相比没有任何明显的区别。在频谱的另一端,我有一些大对象,其中包含了一些其他对象作为属性等,如果它们足够大,那么性能冲击有时会很明显。