.net - .NET 程序平均一直使用 50% 的 CPU,这正常吗?

标签 .net cpu-usage delphi-prism oxygene

我刚刚测试了我的程序,并正在查看其进程的内存使用情况和其他内容。然后,我注意到我的 .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() 调用放入循环中来缓解该问题,但您可能知道,这可能会对您的套接字服务产生不必要的副作用,使其实际上并不始终监听连接。

关于.net - .NET 程序平均一直使用 50% 的 CPU,这正常吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14608751/

相关文章:

asp.net - Server.UrlEncode 与 HttpUtility.UrlEncode

c# - 无法在 Powershell 中加载 .NET 程序集

C# Regex 替换每行中第一次和最后一次出现的双引号

c++ - 为什么这种获取 CPU 利用率的方法产生的结果比任务管理器中的方法低 2 倍?

.net - 双重继承和抽象方法

c# - 什么是循环依赖,我该如何解决?

java - C3P0首选测试查询配置

ios - 事件监视器显示我的 CPU 使用率超过 100% ???(iOS)

Delphi Prism Cirrus 访问和设置函数的结果

.net - delphi prism (.net) 编译器