我的南希网络应用程序一起使用100%的CPU而实际上没有使用它们。
它们在单声道的docker容器内运行。我能想到的唯一一件事就是我的主要功能中的无限循环,比如
while(Console.ReadLine() != "quit") {}
但是我想,Console.ReadLine()
会阻塞,因此只要有一些输入,这个循环就只会执行,而不应该永远。艾米我错过了什么?还有其他原因让南希耗尽单声道的所有CPU吗? - 在Windows开发期间,它似乎运行良好。
更新
docker中的应用程序只是以mono NancyServer.exe
开头。内存使用率远低于以前的XPS基础版本(50-70MB而不是160-180MB),但基于XPS的应用程序使用的CPU不到0.1%(也没有真正做任何事情)
答案 0 :(得分:3)
如果没有使用-t
or -i
options,我可以通过在前台启动容器来重现非阻塞行为。在那种特殊情况下,Console.ReadLine()
不会阻止。
如果使用-i
或-t
,则Console.ReadLine
会阻止。此外,如果我在后台运行容器(使用-d
option),则Console.ReadLine()
会阻止。
如果您在前台运行容器,请务必使用-t
或-i
。
答案 1 :(得分:1)
高CPU负载是由while循环引起的,因为您没有将当前线程短时间置于 sleep 。像:
while(Console.ReadLine() != "quit") {Thread.Sleep(10);}