質問

私は一般に.NET開発にかなり慣れていません。特にキャッシュに関連して、パフォーマンスを調整するためにWebアプリケーションでいくつかのインストルメンテーションを実行したいと思います。動的に生成された多くのカスタムUserControlを作成しました。これらをさまざまな方法でキャッシュしたいのですが、おそらくASPX Page宣言またはプログラムによって。

また、互いに依存する多くのOracleクエリがあり、それらのキャッシュ結果を調べて、最高のパフォーマンス向上が得られるものを確認したいと思います。

これを行う最善の方法は何でしょうか?どういうわけか、私はストップウォッチを使用してIEがページをロードするのにかかる時間を確認することをお勧めしません。遅延が知覚されることを別にすれば、キャッシュがヒットするのかミスするのかはわかりません。 VS2008には、支援するためのツールが組み込まれていますか?

役に立ちましたか?

解決

最近取り組んだプロジェクトでは、SQLクエリのタイミングを確認し、デバッグモードでデバッグリスナーに出力する必要がありました。これにより、SQLクエリのタイミングと実行にかかった時間を評価し、Webサイトのコードをデバッグできました。

これは、SQLクエリを、使用した3種類のSQLメソッドのラッパーメソッドに一元化することで行いました。

  • ExecuteQuery
  • ExecuteNonQuery
  • ExecuteScalar

ストップウォッチクラスを使用していましたが、クエリをSQLステートメントに変換するコードもありました。これは、SQL Server Profilerで見られるものと似ています。

各メソッドは次のようになりました:

protected static object ExecuteScalar(SqlCommand comm, SqlParameter[] sqlParameters)
{
    Stopwatch st = new Stopwatch();
    bool errorDetected = false;

    try
    {
         comm.Parameters.Add(sqlParameters);

         using(comm)
         {
              st.Start();
              object returnValue = comm.ExecuteScalar();
              st.Stop();
              return returnValue;
         }
    }
    catch(Exception)
    {
         errorDetected = true;
         st.Stop();
         throw;
    }
    finally
    {
         string output = GetSqlStringForParameters(sqlParameters,st.Elapsed,QueryType.Scalar);

         if(errorDetected)
         {
              Debug.WriteLine("/*SQL (Errored)*/" + output,"DataAccess.SqlAdapter.ExecuteScalar");
         }
         else
         {
              Debug.WriteLine("/*SQL*/" + output,"DataAccess.SqlAdapter.ExecuteScalar");
         }
    } 
}

これにより、次のようにDebugView.exeでSQLステートメントが出力されます。

/*SQL*/ exec spsGetOrder @OrderNumber='234567' -- Rows returned = 1 ;  1 params |--> completed NonQuery in 0.0016144 seconds. 

この利点は、これらのステートメントにはボトルネックがありますが、クエリをSQLプロファイラーに直接貼り付けて、クエリの出力を取得できることです。また、ログファイルを表示するツールがある場合は、正規表現を使用して、所要時間が特定の範囲にある場所を監視できることも意味します。

したがって、0.5秒以上かかるクエリを探したい場合は、次の用語を検索できます。

<!> quot; in 0. [5-9] \ d + <!> quot; <!> lt;-0.5秒より大きいすべて または <!> quot; in [1-9]。\ d + <!> quot; <!> lt;-1秒より大きいすべて

これは、私たちの努力を非常に集中させるのに役立ちました。また、問題がデータベース関連であるか、上記のようにASP.NETの問題であるかを特定するのにも役立ちます。

最後に、 Fiddler というツールがあります。これは、コンピューターにアクセスしたときにページを診断するのにも役立ちます。 。これにより、ファイルサイズ、画像/ CSSへの参照、ダウンロード時間などの情報が得られます。これは、ViewStateのサイズの問題を診断するのにも非常に便利です。

これが役立つことを願っています

他のヒント

私が通常これにアプローチする方法は、ASP.NETトレースを有効にすることです。 こちらを有効にするための非常に良いガイドがあります。とても詳細で、何よりも無料です。

注目すべきことの1つは、ページのサイズ(特にビューステート)です。これは、コードが実行されてからページがダウンロードされるまでの時間の重要な部分です。もう1つは、 Trace.Write は、テスト対象のコードの前後にあります。

ASP.NETトレースを使用するパフォーマンステストの部分は、簡単には再現できませんが、それでもなお優れたガイドであるため、実際には単なるガイドです。強化したい場合は、Visual Studio 2008 Team Systemにもっと良いツールがあります(私はそれらを使用していませんが)。また、 JetBrains dotTrace および ANTSプロファイラー

AppDynamicsは非常に優れたアプリケーションパフォーマンスモニターであり、構成なしで.NETアプリケーションをインストルメント化できます。そのツールであなたの問題を解決できると思います。 http://www.appdynamics.com/

New Relic で非常に良い経験をしました。非常に簡単なインストール、サイト上の非常に明確なダッシュボード、そしてたまたまRackspaceまたはAmazon Cloudsでホストする場合、通常はProアカウントへの無料アップグレードを提供します。チェックしてください!

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