web-dev-qa-db-fra.com

Quand changer la valeur Generate Serialization Assembly?

J'ai une application cliente Winform qui se connecte au serveur de réseau local de WCF. Il y a un problème de performance du côté client et j'ai cherché la solution et trouvé this post.

Il y est dit que:

Cela ressemble aux assemblys de sérialisation en cours de création. Essayez de modifier les paramètres de la liste déroulante Assemblage de sérialisation en bas du volet Générer de la fenêtre des propriétés du projet.

Ma question est Quand changer la valeur Generate Serialization Assembly et dans quelle valeur dois-je la changer pour améliorer les performances de mon application côté client?

Mes codes sont en C #, framework 4, build en VS2010Pro.

35
John Isaiah Carmona

Afin de sérialiser les classes/structures, les assemblys de sérialisation doivent être générés. Cela peut se produire lors de la compilation ou de l'exécution. Sgen.exe est utilisé pour générer des assemblys de sérialisation au moment de la compilation; Visual Studio peut éventuellement automatiser ce processus, comme vous l'avez découvert.

  • Off : par défaut pour les configurations de débogage (merci, @ Alexandru Lache ). Ne générez pas d'assemblys de sérialisation au moment de la compilation. Les assemblys de sérialisation seront générés à chaque exécution de l'application, selon MSDN :

    Lorsque le générateur XML Serializer n'est pas utilisé, un XmlSerializer génère un code de sérialisation et un assembly de sérialisation pour chaque type à chaque exécution d'une application. Pour améliorer les performances du démarrage de la sérialisation XML, utilisez l'outil Sgen.exe pour générer à l'avance ces assemblys. Ces assemblys peuvent ensuite être déployés avec l'application.

  • Activé : utilisez Sgen.exe pour générer un assembly de sérialisation lors de la compilation. Cela fait gagner du temps au démarrage, mais augmente la taille du déploiement.
  • Auto : valeur par défaut pour les configurations de version. Officiellement, ne génère un Assembly que si XmlSerializer est utilisé dans votre code, par MSDN (merci, @ L-Three =). Dans mes tests, cela n'a pas toujours fonctionné, donc je recommande de le définir explicitement sur On si vous utilisez XmlSerializer.

Donc, ma réponse serait la suivante: si vous êtes préoccupé par le temps de démarrage et que vous utilisez l'attribut Serializable une seule fois, définissez l'option sur On. Si vous êtes plus préoccupé par la taille du déploiement, définissez-le sur Désactivé. Je ne le laisse plus sur Auto, car je ne lui fais pas confiance. Comme je l'ai dit, cela semble être le même que Off, mais je ne compterais pas dessus.

Edit: j'ai vraiment du mal à faire la différence entre Off et Auto. La différence n'est clairement définie nulle part. Je resterais avec On si vous utilisez l'attribut Serializable et Off si vous ne l'utilisez pas. Je ne prendrais pas en compte la taille du déploiement ou le temps de démarrage. Il me semble que je rencontre moins de bogues liés à la sérialisation si je m'en tiens à cette règle.

Mise à jour:

Après un examen des sources mentionnées, je crois que "démarrage" se réfère à la première fois qu'un XmlSerializer est utilisé sur un type donné, pas le lancement initial de l'application. Je ne peux pas être sûr; c'est un peu ambigu.

54
Zenexer