2012-07-18 3 views
2

나는 꽤 큰 방법이있다. 내가 몇 가지 C# 계산을 가지고 또한 3/4 저장 프로 시저를 호출합니다. 3/4 개체를 만들고 마지막으로 목록에 추가하고 목록을 반환합니다.방법의 성능을 향상시키는 방법

내 목표는이 메서드의 성능을 향상시켜 실행 시간을 줄이는 것입니다.

내 질문은 방법의 각 부분을 확인하고 어떤 부분을 실행하는 데 걸리는지 알 수있는 방법이 있습니까? 일부 looging 또는 뭔가있을 수 있습니다 !!

저는 LINQ to EF를 사용하고 있습니다.

+0

'Stopwatch' 클래스는 당신이 그것을 기록하고 싶을 때 관심이있을 것입니다. 또한 조금이라도 문제가있을 수 있다고 생각하면 다른 사람이 왜 느리게 돌아가고 있는지 볼 수 있습니다. – KingCronus

+1

항상 코드의 각 섹션을 따로 따로 할 수 있지만 샘플 프로파일 링을 사용하는 것이 좋습니다. – Thomas

+0

http://codereview.stackexchange.com/에서 코드를 가져 오지 않는 이유 – HatSoft

답변

3

Ants from Redgate과 같은 성능 프로파일 러에 투자하십시오. 더 나은 버전의 Visual Studio도 있습니다. - 프로파일 러는 프로그램을 실행하고 얼마나 많은 시간을 각 라인을 알려줍니다

static void Main(string[] args) 
{ 
    Stopwatch stopWatch = new Stopwatch(); 
    stopWatch.Start(); 
    Thread.Sleep(10000); 
    stopWatch.Stop(); 
    TimeSpan ts = stopWatch.Elapsed; 

    string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}", 
     ts.Hours, ts.Minutes, ts.Seconds, 
     ts.Milliseconds/10); 

    Console.WriteLine("RunTime " + elapsedTime); 
} 
+0

스톱워치는 뭔가가 느려 져야한다고 생각하는 경우 선택할 수있는 첫 번째 옵션입니다. –

1

은 무엇 당신이 찾고있는 것은 프로파일입니다 :

적어도, 당신은 MSDN에서 System.Diagnostics.Stopwatch

사용하여 시도 할 수 전체 실행 시간 중 일정 비율로 실행하는 데 걸리는 시간은 물론 실행 코드가 필요했습니다.

대단한 C# 프로파일 러는 ANTS .Net Profiler입니다. 다소 비싸지 만 14 일 무료 평가판이 있습니다. 귀하의 요구에 완벽하다고 생각합니다.

1

몇 가지 옵션이 있습니다. 나는 이런 종류의 것을 시험하기 위해 멈춤 시계를 사용하고있다. 코드를 작성하기 전에 Howerver가 코드를 잘 수행하고 있는지 확인하십시오. 파산하지 않은 경우 수정하지 않는 것이 가장 좋은 조언입니다. 여전히 관심이 있다면 다음과 같은 일을 할 수 있습니다 :

Stopwatch sw = Stopwatch.StartNew(); 

// do some code stuff here 

sw.Stop(); 

Console.WriteLine(sw.ElapsedTicks); 

또한 sw 변수에 초, 밀리 초 및 기타 측정 값이 있습니다.

+0

감사합니다. 나는 그것을 시도 할 것이다. wcf이고 클라이언트는 iPhone입니다. 그것은 약 3 초 안에 데이터를 반환하지만 요구 사항은 그것을 더 빨리 만드는 것입니다 .. – kandroid

1

당신이 핫스팟 포인트와 코드 조각이 얼마나

PS를 촬영 한 어떤을 알려줍니다 매우 helpfull 기능이 JetBrains dottrace를 사용하는 내 조언은 다음과 같습니다 내 목을 몇 번

0

을 저장했다 데이터베이스 액세스는 일반적으로 사용자가 계산할 수있는 것보다 훨씬 느립니다 (내일 날씨를 예측하지 않는 한). 따라서 LINQ-to-EF 부분은 시간이 손실되는 부분 일 가능성이 큽니다.

프로파일 러를 사용하여 프로그램을 분석 할 수 있습니다. SQL Server에는 쿼리를 모니터링 할 수있는 프로파일 러가 있습니다. 코드를 분석하려면 .NET 용 프로파일 러용 google을 사용하면 무료 라이센스가있는 프로그램을 찾을 수 있습니다. 또는 유용하다고 생각되면 구매하십시오. EQATEC profiler은 나를 위해 매우 유용했습니다.

큰 방법이있는 경우 코드가 잘못 구성되었습니다. 큰 방법을 만드는 것이 더 작은 논리적 부분으로 분할하는 것보다 빠르지는 않습니다. 작은 부품은 유지 보수가 더 쉬우 며 코드 프로파일 러는 메소드 호출 합계만을 반환하고 코드 한 줄에 시간을 표시하지 않기 때문에보다 유용한 정보를 제공합니다.

3

가능한 경우 저장 프로 시저를 병렬로 실행 해보십시오.특히 저장 프로 시저가 읽기 만하고 쓰기가없는 경우 성능이 상당히 향상되는 것을 보았습니다.

그것은 다음과 같이 보일 수 있습니다는 스레드로부터 안전하기 때문에 나는 List 대신 여기에 ConcurrentBag을 사용하고

ConcurrentBag<Result> results = new ConcurrentBag<Result>(); 

Parallel.Invoke(
       () => { 
        var db = new DatabaseEntities(); 
        Result result1 = db.StoredProcudure1(); 
        results.Add(result1); 
       } 
       () => { 
        var db = new DatabaseEntities(); 
        Result result2 = db.StoredProcudure2(); 
        results.Add(result2); 
       } 
       () => { 
        var db = new DatabaseEntities(); 
        Result result3 = db.StoredProcudure3(); 
        results.Add(result3); 
       } 
); 

return results; 

.

+0

좋은 하나! 정말 이걸 좋아해! +1 –

관련 문제