暂停线程,直到释放CPU

时间:2018-06-30 13:27:36

标签: c# .net-core

我要实现的是等待新创建的线程,直到cpu处于N%负载之下。

问题是我无法测量cpu和内存使用情况,因为System.Diagnostics.PerformanceCounter在.NET Core中不起作用。

就性能而言,不知道暂停线程是否明智。

我找到了以下代码:

var proc = Process.GetCurrentProcess();
var mem = proc.WorkingSet64;
var cpu = proc.TotalProcessorTime;
Console.WriteLine("My process used working set {0:n3} K of working set and CPU {1:n} msec", mem / 1024.0, cpu.TotalMilliseconds);

foreach (var aProc in Process.GetProcesses())
    Console.WriteLine("Proc {0,30}  CPU {1,-20:n} msec", aProc.ProcessName, cpu.TotalMilliseconds);

但不了解如何衡量cpu / ram的使用以及如何帮助我在%/MB中获得它的使用

2 个答案:

答案 0 :(得分:3)

对不起,不能。好吧,您可以循环并每秒检查CPU利用率一次,然后等待,但是很严重,这浪费了线程。

您可以做的是建立一个低优先级的线程。

答案 1 :(得分:-1)

这是我正常的“速率限制”代码:

bool continue = true;
int rate = 1;
dateTime dueTime = dateTime.Now.AddMilliSeconds(rate);

while(continue){
  if(dateTime.Now >= dueTime){
    //do your thing.
    dueTime = DateTime.Now.AddMilliSeconds(rate);
  }
  else { 
    Thread.Sleep(1); 
  }
}

请注意,我必须从内存中写入它,因此我的语法可能已关闭。