【发布时间】:2017-03-16 01:16:23
【问题描述】:
我的应用程序使用很多线程,每个线程都使用我的 AddDetailLog 函数将线程的进度添加到全局文本框中,因此我可以跟踪每个线程的进度。这个函数每秒可以调用超过 500 次,当我使用 VS2015 Profiler 的时候,我看到是这个函数占用了我 50% 的 CPU。当我加载超过 150 个线程时,我的 CPU 是 100%,所以我真的需要优化这个功能。
多线程优化功能:
public void AddDetailLog(string text)
{
if(Program.SHOWDETAILSLOG)
{
if (this.textBox_log.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(AddDetailLog);
this.Invoke(d, new object[] { text });
}
else
this.textBox_log.AppendText("[" + DateTime.Now.ToString("HH:mm:ss") + "] - " + text + Environment.NewLine);
}
}
由于多线程的问题,我需要检查我的 textBox 是否需要调用,因为所有线程(不是 backgroundWorker)都在我的全局表单上的同一个 textBox 上起作用。
如果有人有任何想法来优化这个功能,我会很高兴听到。
谢谢
【问题讨论】:
-
您可以创建一个缓冲区来存储消息(不显示它们),然后有一个每 1 秒左右触发一次的计时器将其附加到
TextBox...。或者问问自己, “我真的需要查看所有这些日志消息吗?”
标签: c# multithreading optimization