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";
        }
    }
}

c#应用程序,任务管理器中的任务增加,系统挂起

如果我解析错误的东西道歉,但它看起来像一旦按钮被点击,你然后开始一个新的线程(在MainTimer_Elapsed)每10毫秒?在不了解更多关于上下文/版本的情况下,很难给出具体的替代建议(async/await, TPL等),但似乎任何创建新线程(特别是非后台线程)的事情都是不必要的?

对于处理非ui工作,可以使用ThreadPool。QueueUserWorkItem而不是创建自己的?对于UI工作,也许使用BackgroundWorker?如果你正在耗尽线程池,你也可以考虑设置像最大线程数这样的东西,但是如果你能够瞄准。net 4.x

,那么使用TPL和避免使用/创建/管理线程将会更好/更简单。