2009-06-25 12 views
6

J'ai travaillé sur une application WinForms qui comprend environ 5 assemblages référencés - écrits par nous et environ 8 assemblages référencés par des tiers (nous espérons ne pas les mettre à jour à moins que quelque chose ne se passe) terriblement mal - composants Infragistics/DevExpress!). Nos temps de démarrage sont un peu trop élevés sur les bottes froides, ce que je me demande est de savoir si les ajouter au Gac et les ngen'ing est la voie à suivre. Lorsque nous installons dans le cache NGen, est-ce qu'il doit aussi être dans le gac? Quel est le lien entre les deux? Lequel dois-je viser? Nous avons un exe, je ferais un ILMerge mais je ne suis pas sûr que cela fonctionnera dans notre scénario - longue histoire.Meilleures pratiques de NGen et Gacutil

Aussi, est-il possible d'obtenir la quantité de mémoire mon exe prend - un peu comme les applications Java ne

+1

Vous voudrez peut-être faire un tour avec un profileur pour voir ce qui cause la lenteur en premier. ANTS (par RedGate) est un bon. – Pondidum

Répondre

0

me Sons que votre définition du problème est ce qui implique en quelque sorte votre solution ☺

(comme Netbeans!)

En d'autres termes, comment savez-vous que l'heure de démarrage provient du chargement des assemblages?

Ce que vous devez faire est de profiler l'application et assurez-vous que c'est le cas. C'est possible, mais que se passe-t-il si une initialisation est en cours et que vous vous concentrez trop sur l'optimisation du mauvais endroit?

Here Il existe des outils qui devraient vous aider à établir le profil des applications non gérées.

Puisque vous parlez des applications Winforms, je suppose que vous avez Visual Studio. Si c'est le cas, vous pouvez utiliser its profiler pour votre application gérée.

Bonne chance!

0

Si vous n'utilisez pas 3.5 SP1 du framework .net, vous devriez envisager une analyse comparative sur cette plate-forme pour voir si vous obtenez une différence. Il y a eu des améliorations apportées qui pourraient améliorer les temps de démarrage de l'application: CLR Optimizations In .NET Framework 3.5 SP1

This article a aussi quelques bonnes directives générales, les meilleures pratiques Ngen et astuces avec évitant le rebasage de vos assemblées (bien que pour les 5 ou si des ensembles référencés que vous travaillez avec, ne vous attendez pas à des miracles).

Cependant, il est probable que vous obtiendrez la réduction la plus significative du temps de démarrage en recherchant les goulots d'étranglement spécifiques dans votre propre application particulière, par opposition à trouver une solution rapide ailleurs.

4

L'idée principale pour améliorer le temps de démarrage est d'utiliser l'initialisation retardée autant que possible. Ne pas instancier des choses inutiles immédiatement après le démarrage. Utilisez le modèle lazy init. Il est également possible de démarrer le travail d'initialisation en arrière-plan après l'affichage du formulaire principal pour effectuer une initialisation non critique. Etc, etc, etc.

Vous pouvez également vérifier les éléments suivants article (Improving Application Startup Time).

+1

+1 pour l'article CLR Inside Out sur l'amélioration du temps de démarrage des applications. Très utile. (Vous devriez inclure le titre de l'article dans votre hyperlien - je n'ai presque pas cliqué dessus.) – dthrasher