2011-10-25 14 views
7

Tenemos una aplicación con objetos que nos gustaría mantener serializados en la base de datos.
Actualmente usamos NetDataContractSerializer, pero recientemente descubrimos que debido a la información de los tipos .Net, crea archivos enormes, lo que significa una aplicación lenta, incluso para objetos básicos.
Estamos considerando cambiar a DataContractSerializer en su lugar, y he estado buscando una buena comparación de los dos, pero no encontré ninguno.NetDataContractSerializer vs DataContractSerializer

  • ¿Cuál es la diferencia de tamaños entre los objetos creados por los dos?
  • ¿Hay una gran diferencia de rendimiento?
  • ¿Alguno de ellos es problemático cuando tengo un objeto que contiene un List<X>, donde X es heredado por muchos otros objetos, de modo que la lista contiene muchos tipos diferentes en tiempo de ejecución? (Me dijeron que DataContractSerializer se puede dar KnownTypes atributos, pero esto significa más dependencias en el código. ¿Hay una manera de hacer conocer todo lo que DataContractSerializer tipos en mi solución?)

Gracias.

Respuesta

9
  1. NetDataContractSerializer (NetDCS) escribe la información de tipo para todos los objetos, mientras que el DataContractSerializer (DCS) sólo escribe las que necesita (es decir, si se declara un miembro de tipo B, y el valor real de la pieza cuando ser serializado es de tipo D, donde D es un tipo derivado de B, por lo que hay mucho menos "ruido" en un tipo serializado por DCS.
  2. No realmente, pero debe probar ambos con su escenario para ver si le afectará
  3. Necesita utilizar tipos conocidos en el DCS, pero puede usar un DataContractResolver si no desea trabajar con tipos conocidos. Puede encontrar un ejemplo de dicho resolutor en Youssef Massaoui's blog, y puede encontrar más información sobre el mismo resolver en mi publicación sobre extensibilidad de WCF en http://blogs.msdn.com/b/carlosfigueira/archive/2011/09/21/wcf-extensibility-data-contract-resolver.aspx.
Cuestiones relacionadas