Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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#_Testing_Cpu_Throttling - Fatal编程技术网

C#将CPU的使用率保持在/接近指定的百分比,以便进行测试

C#将CPU的使用率保持在/接近指定的百分比,以便进行测试,c#,testing,cpu,throttling,C#,Testing,Cpu,Throttling,我目前正在开发一个小型的内部测试应用程序,在计算机上创建多种类型的负载,这样我们就可以看到我们的软件在负载下是如何工作的。我挂断了一个请求,在用户运行程序之前,我用某种方式指定CPU的使用率百分比(比如40%),这将有望使CPU保持在他们投入的+10%的范围内。有人告诉我,他们以前见过这样做的程序,但我见过的每一个声称这样做的程序都不起作用。我试图读取平均使用率并休眠线程运行,以降低CPU使用率,但我发现这并不准确。它还将在多台服务器上使用,每台服务器都有不同的CPU,所以我不能做很多硬编码,因

我目前正在开发一个小型的内部测试应用程序,在计算机上创建多种类型的负载,这样我们就可以看到我们的软件在负载下是如何工作的。我挂断了一个请求,在用户运行程序之前,我用某种方式指定CPU的使用率百分比(比如40%),这将有望使CPU保持在他们投入的+10%的范围内。有人告诉我,他们以前见过这样做的程序,但我见过的每一个声称这样做的程序都不起作用。我试图读取平均使用率并休眠线程运行,以降低CPU使用率,但我发现这并不准确。它还将在多台服务器上使用,每台服务器都有不同的CPU,所以我不能做很多硬编码,因为它需要在每台服务器上工作。我个人认为不可能准确地做到这一点,但我在这里是在做最后的努力,看看是否有其他人遇到过类似的软件,并且知道它将如何编写


编辑:我尝试使用低优先级的线程,并且还被告知这对他们没有用处(尽管在我被要求之前,我创建了这个选项只是为了进行测试)。

我们在回调应用服务器时做了类似的事情。我们发现,当CPU在70%左右时,我们的总体吞吐量最好。我们的解决方案是增加额外的线程,每个线程之间有一个延迟,直到达到所需的负载。如果CPU超过80%,我们将减少运行线程的数量(通知线程完成当前工作,然后终止)。如果CPU下降到60%以下,我们将启动一个新线程


您可以应用类似的逻辑来创建可以根据目标CPU利用率调整的人工负载。您的线程需要平衡CPU和非CPU(IO,或者只是睡眠),以便进行微调。如果您的线程非常CPU密集,那么每个线程将消耗1个CPU核心到大约100%。

从Windows 8开始,您可以制作操作系统调度程序。

我不知道有什么方法可以限制您可以消耗多少CPU功率,这是操作系统的任务,请确定调度;除了限制它可以使用多少核之外。你能做的就是改变进程的优先级,我还想提到睡眠,但你已经注意到这是一个不完美的解决方案。如果你不介意我问,你的线程是什么样子的?目前我只是让我的在一个无限循环中做一个不断的加法和减法运算,这会吃掉整个内核(尽管我目前正在工作的机器不是很强大)@BillyGallon,无限CPU绑定的循环会吃掉任何机器上100%的内核(除非操作系统级别的调度由于优先级或其他限制(如usr建议的)而不会调度该线程)在我们的案例中,线程确实工作,从DB表中选择数据,然后对其执行计算。我怀疑,interspering thread.Sleep调用(随机但相当短的时间间隔睡眠)通过CPU密集型计算,您应该可以创建一个平均CPU利用率适中的线程,这样您就可以合理地控制由多个线程生成的总体负载。