なぜaspnet_compiler.exeがこんなに遅いのですか(そしてもっと速くすることができますか)?

StackOverflow https://stackoverflow.com/questions/289831

質問

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

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

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

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

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

役に立ちましたか?

解決

  1. コンパイラは、すべての.aspxページ、チェック
  2. コンパイル中、aspnet_compiler.exeは、css、js、imagesを含むすべてのWebサイトファイルを出力ディレクトリにコピーします。

Webアプリケーションプロジェクトを使用すると、コンパイル時間を短縮できます。 Webサイトモデル。

他のヒント

Roslynコンパイラに切り替えると、ほとんどの場合、プリコンパイル時間が大幅に改善されます。それについての良い記事があります: http://blogs.msdn.com/b/webdev/archive/2014/05/12/enabling-the-net-compiler-platform-roslyn-in-asp -net-applications.aspx

これに加えて、コンパイル要素のbatch属性をtrueに設定して、バッチコンパイルが有効になっていることを確認します。

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

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

前回Web会社で働いていたときに、 aspnet_compiler.exe の非常に分岐したバージョンの記述を始めましたが、「実際の作業」に縛られました。そして決して終わらせなかった。最大の問題はASPXページです:HVCを並列化できるMVC / Razorのものですが、ASPX解析/コンパイルエンジンは、内部およびプライベートクラス/メソッドの約20レベルの深さです。

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

ちょうど2セント。

ASP.NETビューのプリコンパイルを大幅に遅くするものの1つは、 aspnet_compiler.exe -fixednames コマンドラインオプションです。 Razor / MVCを使用している場合は特に、使用しないでください

Visual Studioからwepアプリを公開するときは、「マージしない」を選択し、「しない」を選択して「別のアセンブリを作成する」を選択してください。これがグローバルロックの原因であり、速度を低下させます。

ここに画像の説明を入力してください

詳細はこちら https:// msdn .microsoft.com / en-us / library / hh475319(v = vs.110).aspx

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top