2017-12-26 27 views
1

私は仕事をするWindowsサービスを持っています。私は、パフォーマンスの問題を発見し、このような絵を持っているドットトレースでそれをプロファイル: 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

ワークステーションGCのですか? – Evk

+0

はい、私はこのケースではパフォーマンスが低いです。 – Mikel

+0

".NET Memory Allocations"を選択し、 "Call Stack"パネルの内容を表示できますか?トレースファイルをどこかでアップロードすることができればさらに良いです。 –

答えて

0

最後に私のアプリは「バックグラウンドサーバーのガベージコレクション」を使用していないことが判明しました(マイクロソフトでは、これは.net 4.5 - gc descriptionのデフォルトです)。そこで私はconfigに追加します:

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

そして、GC待機時間を8.5%に短縮します。その結果、5倍のパフォーマンスが得られます。

関連する問題