我有一个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;
}
}
}
有没有人有类似的问题?或者我错过了什么?
答案 0 :(得分:0)
最后我发现我的应用程序没有使用&#34;后台服务器垃圾收集&#34; (微软表示它是默认的.net 4.5 - gc description)。所以我添加到config:
<runtime>
<gcServer enabled="true"/>
</runtime>
它将GC等待时间减少到8.5%,因此我获得了5倍的性能提升。
答案 1 :(得分:0)