2009-05-29 22 views
18

Tengo una aplicación .net 2.0 C# ClickOnce y se conecta a sus datos a través de los servicios web. Me han dicho que una forma de acelerar la aplicación es generar un ensamble de serialización de antemano. Tengo varias preguntas en este frente.Ensamblaje de serialización. ¿Es necesario o no?

  1. La configuración predeterminada para generar un ensamblaje de serialización es Auto. ¿Qué criterios utiliza VS2005 para decidir si se genera un ensamblaje de serialización o no? Parece que no se genera en la configuración de depuración, pero lo hace en la configuración de la versión, pero no puedo decir con certeza y no puede la información en cualquier lugar.

  2. ¿Se ensamblado de serialización en realidad mejorar el inicio de la aplicación? Específicamente, ¿qué mejora? ¿De verdad necesito un ensamble de serialización?

Respuesta

13

Realmente está pidiendo "¿Debo pre-generar los ensamblados de serialización e incluirlo en el proyecto desplegado o tendría que recurrir a la opción predeterminada de generar los conjuntos sobre la marcha?" En general, eso no duele demasiado después del primer golpe perf-wise. Donde puede jugar es que los conjuntos de serialización se generan en %SYSTEMROOT%\TEMP. En algunos casos, el proceso no puede acceder, lo que lleva a excepciones fatales en la mayoría de los casos.

4

En la mayoría de los casos, no es probable que vea un gran beneficio de esta, sobre todo si se mantiene la aplicación abierta por un tiempo. La pregeneración de un ensamblaje de serialización principalmente ayuda al primer tiempo (en una vida útil de exe) que serializa un tipo específico como xml.

6

Esto no es relevante para su situación, pero hay otra buena razón para pre-generar el ensamblado de serialización - es necesaria cuando se aloja el código en SQL Server (es decir SQLCLR). SQL Server no permite que estos ensamblados se generen dinámicamente, por lo que su código de serialización fallaría dentro de SQL Server.

1

Según Intellitrace, sólo la primera vez que XML-serializar un tipo, una FileNotFoundException es lanzada y luego capturado. Esto significa que CLR espera cargar un ensamblaje que contenga todos los serializadores XML para ese ensamblaje específico y, cuando no se encuentra, se lanza una excepción FileNotFoundException para señalar al XmlSerializer: "¡Oye, genera el ensamblaje del parche!" y esto es lo que sucede durante ese "Catch" y luego existe el archivo previamente no encontrado.

He leído en alguna parte que usar try-catch para la lógica es un mal ejercicio. IDK por qué Microsoft ha utilizado este enfoque ...

Cuestiones relacionadas