2009-08-06 18 views
13

¿Cuáles son los inconvenientes de marcar una clase como serializable?Inconvenientes de marcar una clase como Serializable

Necesito guardar mi sesión asp.net en una base de datos y requiere que los objetos en la sesión sean serializables.

Tiene sentido.

Pero resulta que todo lo que tuve que hacer fue decorar esa clase con el atributo [Serializable] y funcionó, por lo que significa que .NET ya tiene la infraestructura subyacente para hacer las clases serializables. Entonces, ¿por qué no puede simplemente hacerlo por defecto?

¿Cuál es la necesidad de marcarlo como tal?

Respuesta

28

¿Por qué no puede simplemente hacerlo por defecto?

La serialización/deserialización automática puede no ser suficiente para el objeto. Por ejemplo, el objeto puede contener un campo que contiene el nombre de un archivo local, un puntero a la memoria, un índice en una matriz compartida, etc. Si bien el sistema podría serializar estos valores en bruto sin problemas, la deserialización podría resultar fácilmente en algo eso no es utilizable En general, es imposible para el sistema resolver esto por sí mismo. Al requerir que marque la clase con Serializable, indica que ha tenido en cuenta estas consideraciones.

-1

En términos de inconvenientes, la principal desventaja de la serialización es la sobrecarga de rendimiento (tanto la CPU como el disco) y los posibles problemas de latencia cuando se envía a través del cable. Puede haber pequeñas preocupaciones con respecto a la seguridad porque, en general, la serialización XML es insegura ya que solo funciona en propiedades y clases públicas, lo que le obliga en algunos casos a propiedades expuestas que de otro modo no podría tener. Por supuesto, si la seguridad es realmente una preocupación, probablemente no almacenaría datos demasiado confidenciales en sesión.

Si está utilizando Silverlight, un posible inconveniente es que Silverlight no admite el atributo [Serializable], por lo que las clases que se decoren con él no se podrán utilizar para sus ensamblajes de Silverlight.

Dicho esto, para la administración de la sesión, los objetos pequeños almacenados en la base de datos ASPState normalmente funcionan bien sin ninguna diferencia notable en la sesión de memoria. En el extremo opuesto del espectro, he tenido objetos grandes con listas de otros objetos como propiedades, etc., y si son lo suficientemente grandes, el rendimiento alcanzado puede ser notable a veces.

+3

serialización xml no es un problema aquí ... no se utiliza en este contexto, y no tiene nada que ver con '[Serializable]' –

Cuestiones relacionadas