C#実現のシステムメモリクリーンアップ

1485 ワード

最近、会社はUディスク製品を作って、WinFormにChromiumWebBrowserを内蔵していますが、ChromiumWebBrowser内のメモリ解放メカニズムを理解していないため、ページをめくりすぎてメモリが溢れています.
大神が書いた360やQQのコンピュータの執事のメモリの整理に関するプログラムを見たことがあります.やはり効果的だと思います.
ネット上ではシステムのSetProcessWorkingSetSizeの関数APIを推奨することが多いが,実践的には使いにくいことが分かった.EmptyWorkingSet関数の使用を推奨します.コードは次のとおりです.
using System;  
using System.Collections.Generic;  
using System.Diagnostics;  
using System.Linq;  
using System.Runtime.InteropServices;  
using System.Text;  
  
namespace SystemMemeoryCleanup  
{  
    class Program  
    {  
        [DllImport("psapi.dll")]  
        static extern int EmptyWorkingSet(IntPtr hwProc);  
  
        static void Main(string[] args)  
        {  
            ClearMemory();  
        }  
        public static void ClearMemory()  
        {  
            GC.Collect();  
            GC.WaitForPendingFinalizers();  
            Process[] processes = Process.GetProcesses();  
            foreach (Process process in processes)  
            {  
                //          ,    ,        。  
                if ((process.ProcessName == "System") && (process.ProcessName == "Idle"))  
                    continue;  
                try  
                {  
                    EmptyWorkingSet(process.Handle);  
                }  
                catch  
                {  
                }  
            }  
        }  
    }  
}  

まずMark、ChromiumWebBrowserを単独でクリーンアップできるかどうかを修正してみましょう.