【发布时间】:2009-07-15 22:50:27
【问题描述】:
我有一个 C# windows 服务充当服务器,该服务在内存中保存一些大型 (>8Gb) 数据结构,并通过远程处理向客户端公开搜索方法。
平均搜索操作在
我注意到一些严重的性能下降 (>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;
}
}
这是个好主意吗?
在什么条件下,GC 将在低延迟块内执行?
注意:我在具有 8 个内核的 x64 服务器上运行
谢谢
【问题讨论】:
-
不要猜测原因。使用分析器、性能计数器、日志记录等来找出实际问题。
-
是的。我使用了性能计数器和日志记录,现在是 GC 时间。
标签: c# .net performance garbage-collection