2

いくつかの大規模なソリューションがあり、それぞれに約 40 の個別のプロジェクト (クラス ライブラリとネストされた Web サイト) があります。すべてを完全に再構築するには、約 2 分かかります。

システム上のいくつかの仕様:

  • Visual Studio 2005、C#
  • プライマリ プロジェクトは Web アプリケーション プロジェクトです
  • 合計 40 プロジェクト (4 Web プロジェクト)
  • 内部VS Webサーバーを使用します
  • テキストボックスを含むユーザーコントロールに至るまで、ユーザーコントロールを幅広く使用しています
  • 部分的な展開を可能にするインライン Web プロジェクトがいくつかあります。
  • 約 120 のユーザー コントロール
  • 約 200.000 行のコード (HTML を含む)
  • ソースセーフを使用しています

私が知りたいのは、ブラウザで初めてサイトにアクセスするときにかかる時間を短縮する方法です。そして、完全な展開後のことについて話しているのではなく、コード、ビルド、ブラウザーの更新に小さな変更を加えることについて話しているのです。

この最初のヒットは、データが返されるまでに約 1 分 15 秒かかります。

速度を上げるために、Ram ディスクを少し試してみました。具体的には、web.config の <compilation> 属性を変更し、tempDirectory を Ram ディスクに設定しました。これにより、処理が少し速くなります。興味深いことに、これにより、ブラウザーからの最初のヒット時にすべての IO アクセスが完全に削除されました。

備考
開発中に完全なコンパイルを行うことはなく、部分的なコンパイルのみを行います。たとえば、作業中のクラス ライブラリがコンパイルされ、次にメイン サイトがコンパイルされ、バイナリがクラス ライブラリから bin ディレクトリにコピーされます。

重要なファイルが変更された後、asp.net エンジンがすべての ascx/aspx ファイルを解析する必要があることは理解しています (bin dir など)。変更されました。

したがって、誰もが次のいずれかの方法を知っています。ソリューションをサブセグメント化して、最初のヒットを高速化するか、構成ファイルなどで設定を微調整します。

繰り返しになりますが、私は開発についてのみ話しているのであって、本番環境への展開については話していないので、ビルド済みのコンパイル オプションを実行することは適用されません。

ありがとう、ルヴァン

4

1 に答える 1

2

うわー、120 のユーザー コントロールがあり、そのうちのいくつかは 1 つの TextBox しか含んでいませんか? これは多くのコードのように聞こえます。

ライブラリ プロジェクトを変更すると、そのライブラリ プロジェクトに依存するすべてのプロジェクトを再コンパイルする必要があり、それらに依存するすべてのプロジェクトなども、スタックのずっと上まで再コンパイルする必要があります。すべてのユーザー コントロールに影響を与えない関数に 1 行の変更を加えただけであることはわかっていますが、コンパイラはそれを認識していません。

おそらくご存じのとおり、ASPX および ASCX ファイルは、Web アプリケーションが最初にヒットしたときにのみコンパイルされます。

別のライブラリ プロジェクト内で、代わりに ASCX ファイルを複合コントロールに変更することで、速度が向上する可能性があります。これらは、Web アプリケーションのロード時ではなく、コンパイル時に (必要に応じて) コンパイルされます。

于 2008-09-08T11:12:25.090 に答える