【发布时间】:2015-05-17 19:42:11
【问题描述】:
我正在开发一个客户端 - 服务器应用程序。而且我有一个无限的while循环来检查客户端(或服务器)是否已发送数据。
while (true)
{
// do things
}
但是,最好的做法是什么?使用上面的代码,当服务器接受一个客户端时,系统的 CPU 会跳到 100%。
如果我将Threading.Thread.Sleep(500) 放在循环的末尾,CPU 使用率会更好,但我想知道这是否是最好的方式,或者是否应该有所不同。
(我知道,我能够异步获取数据——但我的问题不在于,这是关于 while 循环的最佳实践,以便应用程序不会完全消耗 CPU)
【问题讨论】:
-
好吧,IMO 这里的最佳做法是使用异步读取(或者如果您不想这样做,更小睡眠 - 比如 10 毫秒)
-
这绝对是无限
while循环的最佳实践(在大多数情况下预计会占用 100% 的 CPU)。如果您对网络实践有疑问 - 异步代码是更好的方法。 -
@Cageman 我不确定删除
NetworkStream相关的东西是个好主意。至少它显示了您正在使用的内容,而(没有双关语)带有空try-catch的while循环似乎与您的客户端-服务器问题仅略微相关,并且没有说明您使用的技术。无论如何,正如 Alexei 已经指出的那样,async networking 是使用网络 IO 操作的正确方式。 -
@Ahmedilyas 如果一个简单的侦听程序/服务耗尽了他机器的完整核心,你的管理员可能会有点不高兴......只是说;)
-
@Cageman 在这种情况下唯一的答案是,在一般情况下,您应该 不根本不使用
while (true) {...}
标签: c# while-loop