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

C#Json.NET和GC Wait的服务性能问题,c#,multithreading,garbage-collection,json.net,dottrace,C#,Multithreading,Garbage Collection,Json.net,Dottrace,我有一个windows服务,可以做一些业务工作。我使用dotTrace对其进行了分析,以发现性能问题,并获得如下图片: 奇怪的是,GC等待花费了88%的时间,所以我关闭了查看一些小间隔并得到: 我发现在非阻塞期间,线程分配对象 通过JSON.Net反序列化以及被GC阻止的代码: using (var response = await _httpClient.SendAsync(request, combinedTokenSource.Token)) { res

我有一个windows服务,可以做一些业务工作。我使用dotTrace对其进行了分析,以发现性能问题,并获得如下图片:

奇怪的是,GC等待花费了88%的时间,所以我关闭了查看一些小间隔并得到:

我发现在非阻塞期间,线程分配对象 通过JSON.Net反序列化以及被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;
            }
        }
    }
使用(var response=wait _httpClient.SendAsync(请求,combinedTokenSource.Token))
{
response.EnsureSuccessStatusCode();
if(response.Content==null)
抛出新的InvalidOperationException(“未收到HTTP响应”);
使用(var responseStream=await response.Content.ReadAsStreamAsync())
{
使用(var textReader=newjsontextreader(newstreamreader(responseStream)))
{
var results=new JsonSerializer()。反序列化(textReader);
返回结果;
}
}
}

有人有类似的问题吗?还是我遗漏了什么?

最后我发现我的应用程序没有使用“后台服务器垃圾收集”(microsoft说这是.net 4.5中的默认设置)。因此,我将以下内容添加到配置中:

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


它将GC等待时间减少到8.5%,从而使性能提高了5倍。

默认为工作站GC


那么,您是否存在实际性能问题,或者刚刚决定进行测量?是的,在这种情况下,我的性能较低。您能否选择“.NET内存分配”,然后向我们显示“调用堆栈”面板的内容?如果您可以将跟踪文件上传到某个地方,那么就更好了。而且,看起来GC是在单个线程上运行的。启用并发GC会让您松一口气。上传跟踪到魔兽世界,这解决了我的性能问题!我有一个客户端和一个服务器应用程序。服务器是生产者,客户端是消费者。生产和消费物品之间的平均延迟为150毫秒,现在在服务器应用程序上应用此项后,平均延迟为7毫秒!我已经对应用程序进行了两周的评测和重构,低延迟是一个关键目标。我从来没有想过是GC阻塞了我的线程,我很确定这是一些无效的锁定