36 votes

WPF lent à démarrer sur x64 dans .NET Framework 4.0

J'ai remarqué que si je créer mon application WPF pour n'Importe quel CPU/x64, il faut BEAUCOUP plus de temps à démarrer (de l'ordre d'environ 20 secondes) ou de charger de nouveaux contrôles qu'il ne s'commencé sur x86 (dans la version & modes de débogage, à l'intérieur ou à l'extérieur de la SV). Cela se produit même avec la plus simple des applications WPF. Le problème est discuté dans ce MSDN thread, mais aucune réponse n'a été fourni de là. Cela se produit uniquement avec .NET 4.0 -- en 3.5 SP1 x64 était rapide, comme x86. Il est intéressant de noter, Microsoft semble savoir à propos de ce problème, car la valeur par défaut pour un nouveau projet WPF dans VS2010 est x86.

Est-ce un réel bug ou suis-je seulement fait-il mal?

EDIT: peut-être liés à cela: http://stackoverflow.com/questions/2788215/slow-databinding-setup-time-in-c-net-4-0. Je suis l'aide de la liaison de données fortement.

74voto

Josh Points 38617

En fait il y a 2 raisons principales que le type de projet par défaut pour les applications WPF est x86.

  • Intellitrace débogage ne fonctionne qu'avec les x86 et que serait un look assez mauvais si les modèles de projet par défaut ne fonctionne pas avec un seul de leurs cheveux.
  • Beaucoup de développeurs sont toujours pas conscients du fait que leur AnyCPU exe serait exécuté en tant x64 64 bits machines et ont été surpris de constater que 32 bits DLL elles ont invoqué n'existe pas en 64 bits des variétés telles que le OLEDB pilotes, certains natifs de DLL, etc.

Comme pour le temps de démarrage des problèmes que vous rencontrez, il semble presque comme un problème avec NGEN. Puisqu'il y a différentes NGEN caches x64 et x86 processus, il se pourrait que le 64 bits NGEN cache doit être reconstruit ou mis à jour. Essayez d'exécuter les opérations suivantes à partir d'une invite de commandes:

CD C:\Windows\Microsoft.NET\Framework64\v4.0.30319
NGEN update

C'est la commande de re-construire des images natives pour les assemblées qui ont déjà été marqués par NGEN. Elle aussi ne sera probablement pas vous faire du bien à NGEN votre demande si les assemblées ne sont pas également dans le GAC, donc je ne serait pas la peine d'essayer de le faire. Mais cadre des assemblées, les outils assemblées, etc devraient tous être NGEN avais.

(En passant, j'ai eu plusieurs erreurs lorsque j'ai exécuté la commande ci-dessus sur les assemblys qui n'a pas pu être chargé. C'était surtout SQL et Visual Studio assemblées.)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X