C# 如何使用100%CPU修复mono?

C# 如何使用100%CPU修复mono?,c#,linux,mono,cpu-usage,suse,C#,Linux,Mono,Cpu Usage,Suse,我遇到了一个问题,我在SLES机箱上使用mono 3.0.3运行后台进程,在使用top时,我发现它使用了100%的CPU。我搜索并尝试了以下可能的解决方案: 1) 将MONO_THREADS_PER_CPU环境变量设置为1000,即 export MONO\u THREADS\u PER\u CPU=1000 这不起作用。我试过每人300英镑,但也没用 2) 根据,在使用mono执行的程序中使用计时器可能会导致高CPU负载,但是我用一个无限循环编写了一个非常简单的测试程序并运行了它。。。而mon

我遇到了一个问题,我在SLES机箱上使用mono 3.0.3运行后台进程,在使用top时,我发现它使用了100%的CPU。我搜索并尝试了以下可能的解决方案:

1) 将MONO_THREADS_PER_CPU环境变量设置为1000,即

export MONO\u THREADS\u PER\u CPU=1000

这不起作用。我试过每人300英镑,但也没用

2) 根据,在使用mono执行的程序中使用计时器可能会导致高CPU负载,但是我用一个无限循环编写了一个非常简单的测试程序并运行了它。。。而mono仍有100%的CPU使用率

这是我用来测试是否只是因为使用了计时器的程序:

    static void Main(string[] args)
    {
        while(true)
        {
            //Console.WriteLine("Stayin alive.");
        }
    }
3) 我想这可能是Mono3.0.3中的一个问题,所以我升级到了3.6.0,这显然是为SLES11.3推荐的最新版本。Mono仍然占用99-100%的CPU


所以我想知道到底发生了什么,如何解决这个问题。非常感谢您的帮助。

需要在linux级别设置CPU限制。例如:

范例

cpulimit -l 50 COMMAND

否则,代码中可能存在需要修复的错误(例如无限循环)。

您的测试代码将在任何系统(mono/.NET/c++/等)上运行100%的CPU使用率,这是一个无限循环,不会产生任何结果。。。我猜问题在于你的代码,而不是Mono的设置。没有看到你在做什么,很难告诉你如何解决它,但我猜这不是正确的道路。线程是后台线程并不意味着它不能占用处理器资源。您是否尝试运行链接问题中的代码?这将是一个更好的方式,看看计时器是否是一个问题。如前所述,如果你不在某个地方睡觉,无限循环将始终是100%,“我如何解决这个问题”不要使用愚蠢的无限循环,而实际上它什么都不做。您可以通过调用
Thread.Sleep()
,在循环中以很小的间隔手动“限制”循环。另一方面,单核系统将达到100%。双核系统将看到50%的使用率,而3核系统将看到33%的使用率,等等。明白了吗?Thread.Sleep()是一个阻塞调用,它仍将使用100%的可用资源。事实上,它是一个无限循环(一个线性循环)。