Question

Au cours de notre processus de construction, nous exécutons aspnet_compiler.exe sur nos sites Web pour nous assurer que tous les éléments liés tardivement dans ASP.NET/MVC sont réellement construits (je ne connais rien d'ASP.NET mais assuré que cela est nécessaire pour éviter de détecter les défaillances au moment de l'exécution).

Nos sites sont de taille assez grande, avec quelques centaines de pages / vues / contrôles / etc. Cependant, le temps nécessaire semble excessif dans la plage des 10 à 15 minutes (pour référence, il est plus long que la solution complète, avec environ 40 projets à compiler, et nous ne pré-compilons que deux projets de site Web).

Je doute que le problème vienne du matériel, car j’utilise la dernière puce Intel Quad core, avec 4 Go de RAM et un disque dur WD Velociraptor 10 000 tr / min. Et ce qui est étrange, c’est que l’EXE ne semble pas utiliser beaucoup de processeur (1 à 5%) ni faire beaucoup d’E / S.

Alors ... est-ce un problème connu? Pourquoi est-ce si lent? Et y a-t-il un moyen de l'accélérer?

Remarque: Pour clarifier quelques points sur lesquels les gens ont déjà répondu, je ne parle pas de la compilation de code dans Visual Studio. Nous utilisons déjà des projets d’applications Web, et la rapidité de leur compilation n’est pas le problème. Le problème est la pré-compilation du site après que ces projets aient déjà été compilés ( voir cette page MSDN pour plus de détails ) dans le cadre du script de construction de dev. Nous effectuons une pré-compilation sur place, sans copier les fichiers dans un répertoire cible.

Était-ce utile?

La solution

  1. Le compilateur doit générer un deuxième fichier code-behind pour chaque page .aspx, vérifier
  2. Lors de la compilation, aspnet_compiler.exe copiera TOUS les fichiers du site Web dans le répertoire de sortie, y compris css, js et images.

Vous obtiendrez de meilleurs temps de compilation en utilisant Projet d’application Web au lieu de Modèle de site Web.

Autres conseils

Le passage au compilateur Roslyn améliorera très probablement le temps de précompilation. Voici un bon article à ce sujet: http://blogs.msdn.com/b/webdev/archive/2014/05/12/enabling-the-net-compiler-platform-roslyn-in-asp -net-applications.aspx .

De plus, assurez-vous que la compilation par lots est activée en définissant l'attribut batch à true sur l'élément de compilation.

Simplement, aspnet_compiler utilise ce qui est en réalité un "verrou global du compilateur". chaque fois qu'il commence à pré-compiler une page aspx individuelle; il est fondamentalement seulement autorisé à compiler chaque page séquentiellement.

Il y a des raisons à cela (bien que je sois personnellement en désaccord avec elles) - principalement pour détecter et empêcher les références circulaires de provoquer une boucle infinie, ainsi que pour s'assurer que toutes les dépendances sont bien construites avant la compilation de la page requise , ils évitent beaucoup de "problèmes CS méchants".

J'ai déjà une fois commencé à écrire une version à fourche massive de aspnet_compiler.exe la dernière fois que j'ai travaillé pour une société Web, mais que je me suis retrouvé coincé avec "vrai travail". et jamais fini. Le problème le plus important concerne les pages ASPX: les éléments MVC / Razor sur lesquels vous pouvez paralléliser HELL, mais le moteur d’analyse / compilation ASPX contient environ 20 niveaux de profondeur pour les classes / méthodes internes et privées.

Je n'ai pas de conseils spécifiques pour ce compilateur, mais lorsque j'ai ce genre de problème, je lance ProcMon pour voir ce que le processus fait sur la machine, et je lance Wireshark pour vérifier que ce n'est pas le cas. passer beaucoup de temps à limiter certains accès réseau à une machine oubliée depuis longtemps, qui est référencée dans une clé de registre ou une variable d'environnement.

Seulement mes 2 centimes.

L’une des choses qui ralentit considérablement la précompilation des vues ASP.NET est l’option de ligne de commande -fixednames pour aspnet_compiler.exe . Ne l'utilisez pas surtout si vous utilisez Razor / MVC.

Lors de la publication de l'application Web à partir de Visual Studio, veillez à sélectionner les options "Ne pas fusionner" et ne pas sélectionner "Créer un assemblage séparé". car c’est ce qui provoque le verrouillage global et ralentit les choses.

 entrer la description de l'image ici

Plus d'infos ici https: // msdn .microsoft.com / fr-us / library / hh475319 (v = vs.110) .aspx

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top