c#应用程序,任务管理器中的任务增加,系统挂起
本文关键字:增加 系统 任务 挂起 应用程序 任务管理器 | 更新日期: 2023-09-27 18:16:06
在我们的应用程序中,我们使用线程和委托来获得最佳性能。为了控制我们的操作,我们使用System.Timers.Timer
类。当应用程序启动时,1小时后任务管理器显示句柄数量增加,cpu使用率也增加。
如何处理线程和委托的对象?
下面的代码可以帮助您检查此任务。
public partial class Form1 : Form
{
System.Timers.Timer MainTimer;
public Form1()
{
InitializeComponent();
MainTimer = new System.Timers.Timer();
MainTimer.Elapsed+=new System.Timers.ElapsedEventHandler(MainTimer_Elapsed);
}
Thread MainThread;
private void button1_Click(object sender, EventArgs e)
{
MainTimer.Interval = 10;
MainTimer.Start();
}
void MainTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
MainThread = new Thread(new ThreadStart(DoStart));
MainThread.Start();
}
void DoStart()
{
PrintInfo();
}
delegate void PrintInfo_Delegate();
void PrintInfo()
{
if (textBox1.InvokeRequired)
{
Invoke(new PrintInfo_Delegate(PrintInfo));
}
else
{
textBox1.Text += "Test'r'n";
}
}
}
如果我解析错误的东西道歉,但它看起来像一旦按钮被点击,你然后开始一个新的线程(在MainTimer_Elapsed)每10毫秒?在不了解更多关于上下文/版本的情况下,很难给出具体的替代建议(async/await, TPL等),但似乎任何创建新线程(特别是非后台线程)的事情都是不必要的?
对于处理非ui工作,可以使用ThreadPool。QueueUserWorkItem而不是创建自己的?对于UI工作,也许使用BackgroundWorker?如果你正在耗尽线程池,你也可以考虑设置像最大线程数这样的东西,但是如果你能够瞄准。net 4.x