2012-07-06 4 views
3

Même l'application la plus basique avec une fenêtre simple prend plusieurs secondes pour démarrer alors que son équivalent Win32 se charge en une fraction de seconde. J'ai lu que le retard n'est pas dû au temps qu'il faut au JIT pour transformer l'opcode en code machine, mais plutôt au temps que Windows prend pour charger le framework .Net.Pourquoi les applications .Net sont-elles plus lentes à démarrer?

Ainsi, en utilisant MS » tasklist.exe l'application CLI, j'ai vérifié si mscoree.dll était déjà chargé:

C:\>tasklist /m mscoree.dll 

Image Name     PID Modules 
========================= ====== ===================== 
explorer.exe     368 mscoree.dll 
BSQLServer.exe    652 mscoree.dll 
TOTALCMD.EXE     408 mscoree.dll 
Uedit32.exe     260 mscoree.dll 
OUTLOOK.EXE     1912 mscoree.dll 

Ensuite, j'ai couru ma demande de base avec juste un bouton OK, mais il a fallu quelques secondes pour être affichée.

En supposant que mscoree.dll est en effet la preuve que .Net est chargé, au moins pour gérer Windows de base, alors pourquoi le retard? FWIW, c'est sur un hôte XPSP3.

Même si le framework .Net entier est chargé pour chaque processus, étant donné qu'il est déjà opérationnel pour d'autres processus, je suppose qu'il va simplement copier le code de ces autres processus dans la RAM?

Merci.


Edit: Il semble que le temps de démarrage initial plus lent est dû à l'utilisation d'une application antivirus/pare-feu, pas au .Net JIT ou le chargement. Autre problème possible: Si votre application est un peu lente à démarrer à partir d'un état froid, assurez-vous qu'elle ne charge que le strict minimum au démarrage.

+1

Comment utilisez-vous l'application, et quel type d'application est-il? Avez-vous essayé une application console simple, exécutée à partir de la ligne de commande (juste comme un test minimal)? –

+1

Vous pouvez essayer d'utiliser [Process Monitor] (http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx) pour voir ce qui se passe réellement jusqu'à ce que vous voyiez l'interface utilisateur de l'application. Cela inclut des événements tels que le chargement de la DLL, l'accès au fichier et/ou au réseau. –

+0

Difficile de répondre en raison de l'information apparemment contradictoire/incorrecte dans la question. Qui vous a dit que le retard initial n'est pas dû à JIT? –

Répondre

2

J'ai une simple application de test C# sur Windows 7 qui démarre instantanément, sans délai. C'est quand je double-clique sur l'exécutable dans l'explorateur. VisualStudio prend quelques secondes parce que VS vérifie si les choses doivent être compilées, fait probablement de l'instrumentation pour le débogage, etc.

+0

Même ici, même si j'ai une machine assez costaud (SSD, i7 quad-core). –

+0

OT: Juste installé mon 240Gb SSD 6G ce mois-ci et je dis le plus, Visual Studio l'aime: o) – balexandre

+0

FWIW, j'ai couru le binaire intégré de sortie directement, pas de l'IDE de VB Express. – Gulbahar

1

Avast Antivirus utilise également une technique appelée "écran profond" qui vérifie les fichiers excables avant leur lancement. . J'ai ajouté une exception pour le chemin d'accès à mon application VB.NET dans l'écran de configuration Avast Exlusions et elle démarre maintenant instantanément sans aucun retard anormal.

+0

Avast était le coupable clair dans mon cas. J'avais une application .NET Windows Forms qui est passée de 25 à 30 secondes pour s'ouvrir à chaque fois, avec Avast activé, pour être chargée instantanément après avoir mis Avast à "Disabled pendant 10 minutes". –

Questions connexes