私は自分のプログラムをテストして、そのプロセスのメモリ使用量などを調べていました。その後、.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 のインジケーターと通信していない場合、更新されないため、このループは遅延なくループします。