我开发了小型WPF应用,并且我有以下代码在文本框中写日志:
public void RemoteInfo(string message)
{
textBox.Dispatcher.BeginInvoke(new Action(delegate ()
{
DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss.fff", CultureInfo.InvariantCulture) + " " + message + Environment.NewLine + textBox.Text;
}));
}
我从以下代码中调用此方法:
Task.Run(() =>
{
while (true)
{
statusBarWriter.RemoteInfo("Some text");
Thread.Sleep(100);
}
});
此代码正在运行时,CPU使用率至少增加到30%(在30%之后,我停止了该程序以防止冻结)。
代码出了什么问题?如何防止CPU使用率过高?
更新第二个代码段是最新的
答案 0 :(得分:0)
更改写入方式后,CPU负载减少,现在约为0-1%:
textBox.SelectionStart = 0;
textBox.SelectionLength = 0;
textBox.SelectedText = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss.fff", CultureInfo.InvariantCulture) + " " + message + Environment.NewLine;