分析CPU使用率不斷增加的原因


工程中發現引起的問題:

  結合別的朋友的意見,我的優化思路是:

    1、排查是否內存泄漏

        經過反復查詢代碼,未發現有內存泄漏(可以自己百度搜索C#內存泄漏的原因)。可以通過任務管理器分析是否有內存泄漏,打開任務管理器-性能-打開資源監視器,然后可以檢查CPU、內存、磁盤、網絡等信息

    2、排查是否有線程未關閉

        線程未關閉引起的話,開辟線程后在不用時記得

        thread.DisableComObjectEagerCleanup();
                      thread.Abort();

            3、另外可以通過控制程序在那些個CPU中使用,從而避免打開不必要的CPU消耗。具體實現代碼找度娘。

      參考:Process來控制主線程

      

 1 public static void SetProcess()
 2         {
 3             Process p = new Process();
 4             p.StartInfo.FileName = System.IO.Directory.GetCurrentDirectory() + "\\Test.exe";
 5             p.StartInfo.RedirectStandardError = true;
 6             p.StartInfo.RedirectStandardOutput = true;
 7             p.StartInfo.UseShellExecute = false;
 8             p.StartInfo.CreateNoWindow = true;
 9             p.Start();
10 
11             //設置CPU使用數,這里使用了CPU0和CPU1
12             p.ProcessorAffinity= (IntPtr)(0x0001 | 0x0002);
13             p.Close();
14             p.Dispose();
15         }
View Code

    4、CPU的使用率太高的話,線程上可以加上 時間間隔來減少分子,比如你的線程跑的速度是10秒每次和10毫秒每次效果上就完全就不同了(根據電腦的配置不同效果不一樣的),或者直接用while(true);l來檢測CPU的使用率更能直觀看出。

    5、讀完垃圾回收機制后,重寫做一個垃圾回收處理。比如一個線程中1秒鍾強制回收一次。這樣處理后代碼消耗內存基本穩定了,不會爆表。在沒有內存泄漏的情況,推薦這種方式,暴力回收。

      代碼:

 1 /// <summary>
 2         /// 獲取為關聯的進程分配的專用內存量(以字節為kb)。
 3         /// </summary>
 4         /// <returns></returns>
 5         public static long ReadProcessMemory()
 6         {
 7             long usedMemory = 0;
 8             try
 9             {
10                 Process proc = Process.GetCurrentProcess();
11                 usedMemory = proc.PrivateMemorySize64 / 1024;
12             }
13             catch (Exception ex)
14             {
15                 Utils.Log.Log.DataExport("logs", ex.ToString());
16             }
17             return usedMemory;
18         }
View Code

   6、SetProcessWorkingSetSize,然后特別注意下https://blog.csdn.net/weixin_30607659/article/details/97205705與http://blog.sina.com.cn/s/blog_49f8960e0100081x.html的說法,現在內存消耗一直是以龜速慢慢增加,又要砸時間搞這事了 。看我C#垃圾回收機制詳解https://www.cnblogs.com/wwj1992/p/8387360.html,搞到最后估計大家也會經放棄治療了。最后 希望看完的朋友有啥好意見可以分享給我,謝謝。

 

      


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM