Luc*_*tti 4 .net c# performance garbage-collection
我有一个C#windows服务充当服务器,该服务在内存中保存一些大型(> 8Gb)数据结构,并通过远程处理向客户端公开搜索方法.
平均搜索操作在<200ms内执行,服务最多可处理20个请求/秒.
我注意到一些严重的性能下降(> 6000ms)几秒钟
我最好的猜测是服务器线程不时被gen2垃圾收集停止.
我正在考虑从服务器gc切换到工作站gc并将我的搜索方法包装在此以防止GC在请求期间.
static protected void DoLowLatencyAction(Action action)
{
GCLatencyMode oldMode = GCSettings.LatencyMode;
try
{
GCSettings.LatencyMode = GCLatencyMode.LowLatency;
// perform time-sensitive actions here
action();
}
finally
{
GCSettings.LatencyMode = oldMode;
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个好主意吗?
在什么条件下,GC会在低延迟块内进行?
注意:我在运行8核的x64服务器上运行
谢谢
我以前没用过GCLatencyMode,所以不能评论是否使用它是一个好主意.
但是,您确定使用的是服务器GC吗?默认情况下,Windows服务使用工作站GC.
我之前在Windows服务中遇到过类似的问题,并使用以下方法设置服务器GC模式:
<configuration>
<runtime>
<gcServer enabled="true" />
</runtime>
</configuration>
Run Code Online (Sandbox Code Playgroud)
在服务的app.config文件中解决了它.
阅读Tess Ferrandez博客上的这篇文章,了解更多细节.
| 归档时间: |
|
| 查看次数: |
4674 次 |
| 最近记录: |