CPU 使用率 - .NET 程序平均始终使用 50% 的 CPU 是否正常



我只是在测试我的程序,并正在查看其进程的内存使用情况和其他内容。然后,我注意到我的 .NET 程序大约是 CPU 的 50%,几乎每隔一段时间它就会跳到 98% 的 CPU。如果你运行它的时间足够长,程序缺乏更好的"掷骰子"。

这正常吗?

更新:

method RemoteLink.ListenForClientConnections;
var theClient : HandleClient;
begin
    // Loop and wait for client connection.
    while true do
    begin   
        //blocks until a client has connected to the server  
        ServerClientSock := ServerSock.AcceptTcpClient; <<== Blocking 
        theClient := new HandleClient;
        theClient.startClient(ServerClientsock);
        Invoke(new UpdateClients(UpdateTheList),theClient);
    end;
end;

实际上,有问题的while循环线程不是上面的线程,而是下面的线程。

更新:

method TSerialIndicator.BigLoop;
begin
  while true do
  begin
    if TurnOnTx then
    begin
        Thread.Sleep(50);
        TxLight.BackColor := Color.Black; 
        TurnOnTx:=false;
    end;
    if TurnOnRx then
    begin
        Thread.Sleep(50);
        RxLight.BackColor := Color.Black;
        TurnOnRx:=false;
    end;
  end;
end;

一旦我的程序加载并运行,此线程就会启动。如您所见,如果我的程序没有传达我的 winform 上的指标,则不会更新,因此此循环只是循环而没有任何延迟。

任何时候您

有一个while(true)样式的循环,无论语言或平台如何,如果您没有正确构建循环内容,则存在将单个内核固定在 100% 或接近 100% 的风险。在这种情况下,我怀疑你有一台双核机器,这样一个核心可以尽可能快地工作。这导致您的问题中有 50% 的数字。此外,我怀疑循环中的阻塞功能没有按预期工作,因此他们的代码中没有任何内容会让 CPU 中断。

您可以通过在循环中放置 Thread.Sleep() 调用来缓解此问题,但您可能知道,这可能会对您的套接字服务产生不必要的副作用,这样它实际上不会一直侦听连接。

这是

不正常的。注释掉循环,看看您是否有同样的问题。如果这样做,请尝试在其中放置一个 Thread.Sleep(毫秒)以暂停而不烧毁 CPU 周期。如果这不是问题所在,请检查应用程序中的其他循环。

相关内容

  • 没有找到相关文章

最新更新