8

私が現在取り組んでいる ASP.NET Web アプリ プロジェクトは、(IIS または .NET 開発サーバーで) 再読み込みに時間の経過とともに遅くなります。現在、次のものが必要です。

  • F5 デバッグによるロードに 1:28 分
  • ビルド後 (再ビルドではない)、ブラウザーでの更新に 41 秒

マシンはかなり高速です - Core 2 Quad 2.40ghz、8 ギガ o' RAM、開発 VM に割り当てられた 2 ギガ o' RAM を使用して HyperV で開発マシンを実行します。

その初期ロードのサイクル全体を追跡/報告する方法はありますか? 基本的な IIS ワーカー プロセスの開始、DLL のロード、実際の .NET コードの実行にかかる時間を確認できれば、すばらしいことです。

コードでプロファイラーを使用できることはわかっています.DB接続の確立時間が非常に遅くなることはありませんが、実際のページが処理される前に、それらのパフォーマンスについて洞察を得たいと思います. CPU モニターがプロセスの途中で少しの間 100% に達し、RAM 使用量が少し跳ね上がっているのがわかります。

プロジェクトの開始時 (4 か月前) には測定を行いませんでしたが、リロードは比較的簡単だったと確信しています。

ビルド中にコーヒーを飲むことしかできないプログラマーの皆さん、どんな助けでも大歓迎です。

アップデート:

JetBrain のdotTraceは (この例では) 優れていました。ありがとうございます。Web プロジェクトを開始するのに最適なインターフェイスを備えており、ほとんどの時間がApplication_Start() ( Global.asax内) に費やされていることがすぐにわかりました。

次のように、他のオプションはこれを選択しませんでした。

  • TraceオプションはPreInit からのみ開始され、Application_Start() 呼び出しがありません。

  • StopWatch呼び出しでは、どこを見ればよいかを知る必要がありました。または、printf スタイルのデバッグの古き良き時代に戻る必要がありました...

  • nprofは .exe をターゲットにしたいため、新しい w3wp.exe インスタンスにアタッチしようとするとターゲット領域が失われます...

4

6 に答える 6

6

ASP.NET Trace 機能を使用しない理由。リクエストの分析には trace.axd を使用します。

これは役に立つかもしれません:

http://msdn.microsoft.com/en-us/library/ms972204.aspx

http://msdn.microsoft.com/en-us/library/wwh16c6c.aspx

于 2009-11-07T09:11:09.420 に答える
5

JetBrains dotTraceのようなプロファイラーは、ボトルネックがどこにあるかを教えてくれるはずです...通常とは異なるもの (つまり、メソッドの長い処理時間) が見られない場合、それはあなたのアプリケーションではありません。環境に違いない。Active Directory を使用していて、Active Directory への呼び出しがハングしている可能性があります... Web サービス呼び出しはありますか? Team Systems を使用していますか?ビルド後のプロセスはありますか?

私には、何かがタイムアウトしているように聞こえます。それがあなたがとても長く待っている理由です。

于 2009-11-07T06:01:30.963 に答える
4

過去に、redgate の ANTS パフォーマンス プロファイラーを使用しました。それは本当に良いです、そしてそれは私にとって非常にうまくいきました. 誰もがこの種のツールにお金を使いたいわけではないことはわかっていますが、これはその価値があるかもしれません。確認してください。この Web サイトで使用できる 14 日間の無料試用版があり、問題が何であるかを正確に知ることができます。

http://www.red-gate.com/products/ants_performance_profiler/index.htm

幸運を!

于 2009-11-07T17:58:24.847 に答える
3

ページ トレースをオンにして、何かわかるかどうかを確認するという簡単な方法を試しましたか? aspx ページの最初の行は次のようになります。

<%@ Page Language="C#" Trace="true" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="SilverlightApplication1.Web._Default"  %>

ページがブラウザーでレンダリングされると、大量の情報もページの下部に追加されます。

于 2009-11-07T06:59:53.170 に答える
2

プロファイリングとトレースはどちらも推奨事項です。

DateTime.Now.ToString() の提案に従う場合は、代わりに System.Diagnostics.StopWatch クラスを使用することをお勧めします。使い方はとても簡単で、より正確だと思います。

using System.Diagnostics;
//...
Stopwatch watch = new Stopwatch();
watch.Start();
// Do your loading work here
watch.Stop();
// You can use watch.ElapsedMilliseconds to get the elapsed time
于 2009-11-07T07:26:46.743 に答える
-1

ログファイルに時刻を書き込んで確認してください。

namespace TracePageLoad
{
    public partial class _Default : System.Web.UI.Page
    {
        string sLogDir = "Your path to write the log";
        protected void Page_Load(object sender, EventArgs e)
        {
            TextWriter objTW = new StreamWriter(sLogDir, true);
            objTW.WriteLine(DateTime.Now.ToString());
            //Your code 
            objTW.WriteLine(DateTime.Now.ToString());
            objTW.Close();
        }
    }
}
于 2009-11-07T06:03:55.030 に答える