2017-12-26 11 views
1

저는 비즈니스 업무를 수행하는 Windows 서비스가 있습니다. 나는 성능 문제를 발견하고이 같은 사진을 가지고 dotTrace와 함께 프로필 : GC Wait 88%Json.NET 및 GС에서 C# 서비스 성능 문제 대기

GC는 88 %의 시간을 기다리는 것이 이상한 것을, 그래서 몇 가지 작은 간격으로 닫힌 모양을 얻을 수 : Thread stats

using (var response = await _httpClient.SendAsync(request, combinedTokenSource.Token)) 
    { 
     response.EnsureSuccessStatusCode(); 
     if (response.Content == null) 
      throw new InvalidOperationException("No HTTP response received."); 

     using (var responseStream = await response.Content.ReadAsStreamAsync()) 
     { 
      using (var textReader = new JsonTextReader(new StreamReader(responseStream))) 
      { 
       var results = new JsonSerializer().Deserialize<ElasticResponse>(textReader); 
       return results; 
      } 
     } 
    } 

사람이 비슷한 문제가 있었나요 :

나는 기간 bloking없는 동안, 스레드가 JSON.Net의 deserilization을 통해 객체 를 할당하고이 코드는 GC에 의해 차단 된 것을 발견? 또는 나는 무엇인가 놓치고 있냐?

+0

그래서 당신이 실제 perfomance 문제가 있나요하거나 측정하기로 결정 워크 스테이션 GC에게 무엇입니까? – Evk

+0

예,이 경우 성능이 낮습니다. – Mikel

+0

".NET 메모리 할당"을 선택한 다음 "호출 스택"패널의 내용을 표시 할 수 있습니까? 추적 파일을 어딘가에 업로드 할 수 있다면 더 좋다. –

답변

0

마침내 나는 내 응용 프로그램이 백그라운드 서버 가비지 수집을 사용하지 않는다는 것을 발견했습니다. (마이크로 소프트는 .net 4.5 - gc description에서 기본값이라고 말합니다). 그래서 설정에 추가 :

<runtime> 
     <gcServer enabled="true"/> 
    </runtime> 

그리고 내가 GC 대기 시간을 8.5 %로 줄이면 결과적으로 5 배 성능 향상을 얻습니다.