2009-05-28 6 views
4

J'ai un Visual   Studio   2005/C# ClickOnce application qui obtient toutes ses données à partir d'un Web service. J'ai mis l'application à l'écoute là où les utilisateurs se sentent bien, même si elle doit aller chercher des données du service Web pour presque tout.Façons d'accélérer le démarrage d'une application ClickOnce

Cependant, le démarrage est encore assez lent. Il semble que cela prenne un certain temps pour générer le premier appel de service Web. Après ça, c'est bon.

Que puis-je faire pour accélérer le démarrage de ce type d'application? Ai-je besoin de générer un assemblage de sérialisation?

Répondre

4

Passez un peu de temps à analyser les assemblys chargés par votre application. Cela va avoir le plus grand effet sur le temps de chargement de votre application. Si vous avez des types qui ne sont utilisés que rarement, déplacez-les dans un autre assemblage. ClickOnce peut optimiser le téléchargement des assemblages à la demande, réduisant ainsi le nombre d'assemblages requis au moment du chargement, ce qui accélère le chargement.

Vous pouvez également avoir une sorte de lanceur "stub" avec des dépendances d'assemblage minimum qui charge dynamiquement les autres assemblages (Assembly.Load) et appelle le traitement réel après leur chargement.

+3

(sans importance) c'est l'effet. affect est un verbe actif ou, dans le jargon de la psychologie, un nom dénotant la capacité d'expression de l'humeur - mais ce sens met l'accent sur la première syllabe. –

+0

Je voudrais en savoir plus sur le chargement différé/tronçon ... – Tim

+0

Je voudrais en savoir plus sur l'effet vs affecter –

3

Vous pouvez utiliser des groupes de fichiers ClickOnce pour diviser votre application en éléments gérables, puis utiliser l'API ClickOnce pour télécharger des groupes en cas de besoin. L'article ClickOnce File Groups explique comment faire cela.

1

Assurez-vous d'obtenir .NET 3.5 SP1 car il y a des améliorations significatives de performance dans le domaine du démarrage. Particulièrement avec les applications WPF.

Et pour l'appel de service Web, vous pouvez accélérer cela si vous vous assurez que vous générez un assembly de sérialisation lorsque vous compilez. De ce que je me souviens, Visual Studio n'est pas très intelligent pour savoir quand générer ce fichier automatiquement, mais vous pouvez le faire avec SGEN.EXE.

Il crée un assembly séparé tel que MyApp.XmlSerializer.dll qui contient tout le code de sérialisation pour l'appel de service Web. Sans cela, votre application effectuera un test échoué pour l'assembly, puis générera dynamiquement le code et le compilera en mémoire, ce qui explique pourquoi votre premier appel de service Web est lent.

Questions connexes