Frage

Während unserer Build-Prozess, den wir aspnet_compiler.exe gegen unsere Websites laufen, um sicherzustellen, dass alle die spät gebundene Sachen in ASP.NET/MVC baut tatsächlich (ich weiß nichts über ASP.NET bin aber sicher dies ist notwendig, um zu verhindern, die Fehler zu finden zur Laufzeit).

Unsere Seiten sind ziemlich groß, mit ein paar hundert Seiten / Ansichten / Kontrollen / etc. aber die Zeit, scheint in dem 10-15 Minuten Bereich übermäßige (als Referenz, das ist länger als die gesamte Lösung mit ca. 40 Projekten nimmt zu kompilieren, und wir sind nur vor-Kompilierung zwei Website-Projekte).

Ich bezweifle, dass Hardware das Problem ist, wie ich auf dem neuesten Quad-Core-Intel-Chip renne, mit 4 GB RAM und einer WD Velociraptor 10.000 U Festplatte. Und ein Teil von dem, was seltsam ist, dass die EXE scheint nicht mit vieler CPU (1-5%) zu sein und scheint nicht sehr viel von I / O entweder zu tun.

So ... ist dies ein bekanntes Problem? Warum ist es so langsam? Und gibt es eine Möglichkeit, es zu beschleunigen?

Hinweis: , um ein paar Dinge zu klären die Menschen über beantwortet haben, ich spreche nicht über die Erstellung von Code in Visual Studio. Wir verwenden Projekte Web-Anwendung bereits, und die Geschwindigkeit der Zusammenstellung von der ist nicht das Problem. Das Problem ist die Vorkompilierung der Website nach haben diese Projekte bereits zusammengestellt ( finden Sie in dieser MSDN-Seite, um weitere Informationen ) als Teil des Entwickler-Build-Skript. Wir führen in-Place-Vorkompilierung, nicht die Dateien in ein Zielverzeichnis kopiert werden.

War es hilfreich?

Lösung

  1. Compiler zweite Code-Behind-Datei für jede ASPX-Seite webanwendungsanwendungsprojekt statt Website-Modell.

Andere Tipps

Die Umstellung auf Roslyn Compiler wird wahrscheinlich deutlich precompile Zeit verbessern. Hier ist ein guter Artikel über sie: http://blogs.msdn.com/b/webdev/archive/2014/05/12/enabling-the-net-compiler-platform-roslyn-in-asp -Netz-applications.aspx .

Zusätzlich dazu, stellen Sie sicher, dass Batchkompilierung indem Batch-Attribut auf true auf der Compilation Element aktiviert ist.

Einfach, verwendet das aspnet_compiler was effektiv eine „globale Compiler Sperre“, wenn es beginnt jede einzelne aspx Seite Pre-Kompilierung; es ist im Grunde nur erlaubt, um jede Seite nacheinander zu kompilieren.

Es gibt Gründe dafür (obwohl ich persönlich mit ihnen nicht einverstanden ist) - in erster Linie, um zirkuläre Referenzen zu erkennen und zu verhindern eine Endlosschleife der Art verursacht, sowie sicherzustellen, dass alle Abhängigkeiten ordnungsgemäß gebaut werden, bevor die erforderlich Seite kompilieren , sie haben eine Menge "nasty CS Fragen".

vermeiden

Ich begann einmal eine Massively-Gabel Version aspnet_compiler.exe letztes Mal schriftlich ich bei einem Web-Unternehmen arbeitete, bekam aber mit „echten Arbeit“ gebunden und es nie fertig. Das größte Problem ist die ASPX-Seiten. Das MVC / Razor Sachen, die Sie die Hölle aus parallelisieren können, aber die ASPX Parse / kompilieren Motor ist etwa 20 Ebenen tief von internen und privaten Klassen / Methoden

Ich habe keine speziellen heiße Tipps für diesen Compiler, aber wenn ich diese Art von Problem habe, ich laufe ProcMon, um zu sehen, was der Prozess auf der Maschine tut, und ich laufe Wireshark zu überprüfen, dass es nicht Ausgaben im Alter auf eine längst vergessene Maschine auf dem Netzwerk zugreift Timing-out, die in irgendeine Registrierungsschlüssel oder Umgebungsvariable referenziert wird.

Just my 2 cents.

Eines der Dinge zu verlangsamen ASP.NET Ansichten deutlich Precompilieren ist die -fixednames Befehlszeilenoption für aspnet_compiler.exe. Verwenden Sie es nicht vor allem, wenn Sie auf Razor / MVC sind.

Wenn die wep App von Visual Studio Publishing stellen Sie sicher, wählen Sie „nicht verbinden“, und nicht wählen Sie „separate Baugruppe erstellen“ führen das ist, was die globale Sperre verursacht und Dinge verlangsamt.

Mehr Infos hier https: // msdn .microsoft.com / en-us / library / hh475319 (v = vs.110) aspx

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top