У меня есть служба Windows C #, выступающая в роли сервера, служба хранит некоторые большие (> 8 ГБ) структуры данных в памяти и предоставляет клиентам методы поиска через удаленное взаимодействие.
Операция поиска в среднем выполняется <200 мс, и служба обрабатывает до 20 запросов / сек. </p>
Я замечаю некоторое серьезное снижение производительности (> 6000 мс) на регулярной основе в течение нескольких секунд
Мое лучшее предположение - то, что потоки сервера время от времени останавливаются сборкой мусора 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 все равно будет выполняться внутри блока с низкой задержкой?
Примечание: я работаю на сервере x64 с 8 ядрами
Спасибо