29

ビルド プロセス中にaspnet_compiler.exe、Web サイトに対して実行して、ASP.NET/MVC のすべての遅延バインディングが実際にビルドされることを確認します (ASP.NET については何も知りませんが、実行時にエラーが見つからないようにするためにこれが必要であると確信しています)。

私たちのサイトはサイズがかなり大きく、数百のページ/ビュー/コントロールなどがあります。ただし、所要時間は 10 ~ 15 分の範囲で長すぎるようです (参考までに、これは約 40 プロジェクトのソリューション全体をコンパイルするのにかかる時間よりも長く、2 つの Web サイト プロジェクトのみをプリコンパイルしています)。

4GB RAM と WD Velociraptor 10,000rpm ハードディスクを搭載した最新のクアッド コア Intel チップで実行しているため、ハードウェアが問題であるとは思えません。奇妙な点の 1 つは、EXE が CPU をあまり使用していないよう (1 ~ 5%) であり、I/O も大量に使用していないように見えることです。

それで...これは既知の問題ですか?なぜそんなに遅いのですか?そして、それをスピードアップする方法はありますか?

注:人々が回答したいくつかのことを明確にするために、私は Visual Studio 内でのコードのコンパイルについて話しているのではありません。既に Web アプリケーション プロジェクトを使用しており、それらのコンパイルの速度は問題ではありません。問題は、これらのプロジェクトが開発ビルド スクリプトの一部として既にコンパイルされた後のサイトの事前コンパイルです(詳細については、この MSDN ページを参照してください)。ファイルをターゲットディレクトリにコピーするのではなく、インプレースで事前コンパイルを実行しています。

4

5 に答える 5

6

簡単にaspnet_compiler言えば、個々の aspx ページのプリコンパイルを開始するたびに、実質的に「グローバル コンパイラ ロック」を使用します。基本的に、各ページを順番にコンパイルすることのみが許可されています。

これには理由があります (個人的には同意しませんが) - 主に、循環参照を検出して回避し、並べ替えの無限ループを引き起こし、必要なページがコンパイルされる前にすべての依存関係が適切に構築されるようにするためです。多くの「厄介なCSの問題」。

前回ウェブ会社で働いていたときの大規模な分岐バージョンを書き始めたことaspnet_compiler.exeがありますが、「実際の作業」に縛られて完成することはありませんでした。最大の問題は ASPX ページです。HELL を並列化できる MVC/Razor のものですが、ASPX 解析/コンパイル エンジンは、内部およびプライベート クラス/メソッドの約 20 レベルの深さです。

于 2013-01-16T01:09:04.490 に答える
2
  1. Compiler should generate second code-behind file for every .aspx page, check
  2. During compilation, aspnet_compiler.exe will copy ALL of the web site files to the output directory, including css, js and images.

You'll get better compilation times using Web application project instead of Web site model.

于 2008-11-17T01:49:52.470 に答える
0

このコンパイラに関する具体的なヒントはありませんが、このような問題が発生した場合は、ProcMon を実行してマシン上でプロセスが何を行っているかを確認し、Wireshark を実行して時間を費やしていないことを確認します。 -いくつかのレジストリキーまたは環境変数で参照されている、長い間忘れられていたマシンへのネットワークアクセス。

于 2008-11-14T11:44:58.683 に答える