• 多线程实例,占用CPU过多


    自已研究一下,有新发现,以前没发现这么多 

    Thread mainThread;
            Thread childThread;
            private void btnRun_Click(object sender, EventArgs e)
            {
               mainThread = new Thread(()=>ReadThread());
                mainThread.IsBackground = true;
                mainThread.Start();
            }

            protected void ReadThread()
            {
                int works = 100;
                for (int i = 0; i < nums; i++)
                {
                
                    childThread = new Thread(() => ToDoSth(works, i));
                    childThread.IsBackground = true;
                    childThread.Start();

                }

            }
            protected void ToDoSth(int works, int threads)
            {

                for (int i = 0; i < works; i++)
                {
                    Application.DoEvents();
                   Thread.Sleep(5000);
                    this.Invoke((MethodInvoker)delegate
                    {
                        listBox1.Items.Add(threads + ":" + System.DateTime.Now.ToString());
                    });

                    Application.DoEvents();

                }
            }

    原因:程序中因为使用ThreadPool 多线程操作.Form.Invoke 用了很多,造成CPU占用 90%以上,甚至程序假死..... 我一度去掉所有lock数据库操作什么的代码,都没大的改善.....

    解决方法:

    每次调用完后. 让她睡个300毫秒(System.Threading.Thread.Sleep(300) ,你可以设置更小.) 整个世界清静了,CPU没超过10%.

     

  • 相关阅读:
    WEB服务-Nginx之10-动静分离
    第10课 文件指针及目录的创建与删除
    c++ 中常用类型转换
    编译c++文件时报错:在...中已定义,例如:已经在 .obj 中定义
    No converter found for return value of type: class java.util.ArrayList
    Unable to ping server at localhost:1099
    Failed building wheel for twisted
    第六天-缺陷和缺陷报告
    第五天-黑盒测试用例设计方法(二)
    第四天-测试用例和设计方法(一)
  • 原文地址:https://www.cnblogs.com/qq4004229/p/2246414.html
Copyright © 2020-2023  润新知