문제

저는 일반적으로 .NET 개발에 상당히 익숙하지 않습니다. 특히 캐싱과 관련하여 성능을 조정하기 위해 웹 응용 프로그램에서 몇 가지 계측을하고 싶습니다. ASPX 페이지 선언 또는 프로그래밍 방식으로 다른 방식으로 캐싱을 시도하고 싶은 많은 사용자 정의 동적으로 생성 된 USERCONTROLS를 작성했습니다.

나는 또한 서로에 의존하는 많은 Oracle 쿼리를 가지고 있으며 최고의 성능을 제공 할 것인지 확인하기 위해 캐싱 결과를 살펴보고 싶습니다.

이것에 대해 가장 좋은 방법은 무엇입니까? 어쨌든 나는 Stopwatch 시청을 사용하여 페이지를 얼마나 오래 가져 오는 것이 가장 좋은 아이디어라고 생각하지 않습니다. 내 캐싱이 인식 된 지연을 제외하고는 캐싱이 치거나 놓치고 있는지 전혀 모른다. VS2008에는 도움을 줄 도구가 있습니까?

도움이 되었습니까?

해결책

최근에 작업 한 프로젝트는 SQL 쿼리의 타이밍을 확인하고 디버그 모드에서 디버그 리스너로 출력해야했습니다. 이런 식으로 우리는 SQL 쿼리의 타이밍을 평가할 수 있으며, 실행 시간이 얼마나 오래 걸렸고, 웹 사이트 코드를 디버깅 할 수 있습니다.

SQL 쿼리를 우리가 사용한 3 가지 유형의 SQL 방법에 대한 래퍼 메소드로 중앙 집중화하여이를 수행했습니다.

  • executequery
  • ExecuteNupery
  • ExecutesCalar

그들은 STOPWATCH 클래스를 사용했지만 SQL Server Profiler에서 볼 수있는 것과 유사하게 쿼리를 SQL 문으로 변환하는 코드도있었습니다.

각 방법은 다음과 유사했습니다.

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 초 이상의 쿼리를 찾으려면 다음을 검색 할 수 있습니다.

"0. [5-9] d+"<-0.5 초 이상 또는 [1-9]에서[1-9]. d+"<-1 초보다 큰 모든 것

이것은 우리의 노력에 엄청나게 집중하는 데 도움이되었습니다. 또한 문제가 데이터베이스 관련인지 또는 위에서 제공 한대로 ASP.NET 문제인지 식별하는 데 도움이됩니다.

마지막으로,라는 도구가 있습니다 바이올리니스트 또한 페이지가 컴퓨터에 올 때 페이지를 진단하는 데 도움이 될 수 있습니다. 이렇게하면 파일 크기, 이미지/CSS 참조, 다운로드 시간과 같은 정보가 제공됩니다. 이것은 관점 스테이트 크기 문제를 진단하는 것도 매우 유용합니다.

이게 도움이 되길 바란다

다른 팁

내가 일반적으로 이것에 접근하는 방식은 ASP.NET 추적을 활성화하는 것입니다. 활성화에 대한 좋은 가이드가 있습니다 이곳은 여기. 그것은 아주 상세하고 무엇보다도 무료입니다.

집중해야 할 것은 코드가 실행되면 페이지가 다운로드하는 데 걸리는 페이지의 크기 (특히 뷰 상태)입니다. 다른 하나는 코드 렌더링의 특정 부분이 TRACE.WRITE 코드가 전후에 완성됩니다.

ASP.NET 추적 사용의 PERP 테스트 부분은 쉽게 반복 할 수 없지만 좋은 것이 아니기 때문에 가이드 일뿐입니다. 당신이 그것을 강화하고 싶다면, Visual Studio 2008 팀 시스템에는 더 나은 도구가 있습니다 (내가 사용하지는 않았지만). 또한 있습니다 JetBrains dottrace 그리고 개미 프로파일 러.

AppDynamics는 매우 우수한 애플리케이션 성능 모니터로 구성없이 .NET 응용 프로그램을 계측 할 수 있습니다. 나는 그 도구에 당신의 문제를 해결할 수 있다고 생각합니다. http://www.appdynamics.com/

나는 아주 좋은 경험을 가지고있었습니다 새로운 유물. 매우 간단한 설치, 사이트에 매우 명확한 대시 보드, 랙 스페이스 또는 Amazon 구름에서 호스팅을하는 경우 일반적으로 Pro 계정으로 무료 업그레이드를 제공합니다. 'em out를 확인하십시오!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top