Json.NET和GC Wait的C#服务性能问题

时间:2017-12-26 16:41:19

标签: c# multithreading garbage-collection json.net dottrace

我有一个Windows服务,可以做一些业务工作。我使用dotTrace对其进行分析以查找性能问题,并得到如下图片: GC Wait 88%

似乎很奇怪,GC等待占88%的时间,所以我闭嘴看一些小间隔并得到: Thread stats

我发现在没有臃肿期间,线程会分配对象 通过JSON.Net deserilization以及此代码被GC阻止:

    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;
            }
        }
    }

有没有人有类似的问题?或者我错过了什么?

2 个答案:

答案 0 :(得分:0)

最后我发现我的应用程序没有使用&#34;后台服务器垃圾收集&#34; (微软表示它是默认的.net 4.5 - gc description)。所以我添加到config:

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

它将GC等待时间减少到8.5%,因此我获得了5倍的性能提升。

答案 1 :(得分:0)