У меня возникла проблема, когда я запускаю фоновый процесс, используя mono 3.0.3 на коробке SLES, и при использовании top я обнаружил, что он использует 100% ЦП. Я искал и пробовал следующие возможные решения:
1) Установка переменной среды MONO_THREADS_PER_CPU на 1000, т.е.
export MONO_THREADS_PER_CPU=1000
Это не сработало. Я пробовал с 300, согласно этой теме, но это тоже не сработало .
2) Согласно этому потоку стека post, использование таймеров в программе, которая будет выполняться с использованием моно, может привести к высокой нагрузке на ЦП, однако я сделал очень простую тестовую программу с бесконечным циклом и запустил ее... и моно по-прежнему использовал 100% ЦП.
Это программа, которую я использовал, чтобы проверить, было ли это просто из-за использования таймеров:
static void Main(string[] args)
{
while(true)
{
//Console.WriteLine("Stayin alive.");
}
}
3) Я подумал, что, возможно, это проблема в моно версии 3.0.3, поэтому я обновился до версии 3.6.0, которая, по-видимому, является последней версией, рекомендованной для SLES 11.3. Моно по-прежнему занимает 99-100% процессорного времени.
Так что я задаюсь вопросом, что происходит и как я могу решить эту проблему. Любая помощь очень ценится.
Thread.Sleep()
с небольшим интервалом внутри вашего цикла. Кстати, одноядерная система будет на 100%. Двухъядерная система будет использовать 50%, в то время как трехъядерная система будет использовать 33% и т. д. ... поняли? - person Idle_Mind   schedule 28.07.2015