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.
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.
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.
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.
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.