Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 限制应用程序的CPU使用_C#_.net_Cpu_Throttling - Fatal编程技术网

C# 限制应用程序的CPU使用

C# 限制应用程序的CPU使用,c#,.net,cpu,throttling,C#,.net,Cpu,Throttling,一台新的游戏服务器刚刚问世,我们公司想提供租赁服务。然而,游戏开发人员没有创建任何休眠模式,在没有玩家连接的情况下关闭物理系统,因此空服务器消耗了大约30%的CPU 我发现这个游戏限制了应用程序的CPU使用 我已经用C#NET为我们公司编写了一些小应用程序来帮助改进我们的服务,我想知道我将如何着手创建这样的东西。有可能吗?你可以考虑简单地降低进程的优先级。这不会直接限制CPU,但会导致进程线程的调度频率低于具有正常和更高优先级的进程 检查System.Diagnostics.Process.Pr

一台新的游戏服务器刚刚问世,我们公司想提供租赁服务。然而,游戏开发人员没有创建任何休眠模式,在没有玩家连接的情况下关闭物理系统,因此空服务器消耗了大约30%的CPU

我发现这个游戏限制了应用程序的CPU使用


我已经用C#NET为我们公司编写了一些小应用程序来帮助改进我们的服务,我想知道我将如何着手创建这样的东西。有可能吗?

你可以考虑简单地降低进程的优先级。这不会直接限制CPU,但会导致进程线程的调度频率低于具有正常和更高优先级的进程

检查
System.Diagnostics.Process.PriorityClass
()

这可能会让您感兴趣,我也会这么做

如何限制C程序的CPU使用量?

我不知道您是否可以这样做,但是您可以通过属性更改执行线程的线程优先级。您可以通过以下方式设置:

而且,我认为你不是真的想把它封顶。如果机器处于空闲状态,您希望它忙于执行任务,对吗?ThreadPriority有助于将此信息传达给调度程序


我假设游戏服务器是线程化的。如果是这种情况,您可能能够实际地在应用程序上强制CPU相关性。如果你有办法判断游戏是否有用户,即如果UDP数据包在指定的端口上,你可以说“嘿,没有人连接”。然后,您可以让您的程序将所有工作线程强制放到同一个内核上

所以,如果你有一个8核的cpu,所有的线程都在一个核心上,那么最多只能使用12.5%的cpu

一旦看到数据包在分配的端口上传入,就可以将关联重新分配给所有核心

你可以更进一步,说“有没有空闲的游戏。如果有空闲的游戏,它们都是开着的..比如..core 7,然后以比游戏更高的优先级运行HLT指令的无限循环,但是强制线程睡眠,这样它就不会完全饿死游戏

这将导致CPU使用更少的电源,但工作量会大得多,出现问题的几率也会更高


我会坚持只强制关联,让所有空闲游戏共享一些给定的内核。

我猜服务器应用程序正在进行轮询,而不是事件驱动。轮询将使用CPU,除非这段代码转换为事件驱动。应用程序将休眠,直到它从操作系统接收到需要处理的事件ss.轮询只会旋转查找事件并浪费CPU。除非以任何方式降低CPU使用率,否则降低进程的优先级将不会真正有帮助。此应用程序需要重写以提高CPU效率。

这似乎是链接程序的功能,因此此答案为+1。我无法想象有任何方式限制活动在没有反向工程和修补现有代码的情况下对程序进行内部修复,这可能违反版权/EULA,具体取决于您所在的国家和所讨论的程序。我们使用的游戏面板可以选择以较低的优先级运行服务,但此游戏似乎使用任何可用的CPU。这就是为什么我更愿意选择的原因与其简单地降低优先级,不如限制它。@Michael,如果降低优先级,那么这不是问题。当其他进程想要使用CPU时,它将有效地避开。不要让CPU%欺骗你。另外,检查以确保没有其他正在运行的进程。这些游戏服务器中的一些会产生其他进程根据游戏所做的事情,总是有可能人为地减慢速度,只会导致大量事件被备份,或者当你想再次使用它时,它基本上没有响应,而它会清除节流所造成的积压。你可能没事,我只是觉得I don’’我不明白它在那段时间里用30%的cpu做什么可能是有价值的。可能是因为拥有这些东西是不必要的。当然了。哇,听起来很烦人。如果有的话,它会消耗很多额外的能量。
Thread.CurrentThread.Priority = ThreadPriority.Lowest;