c#的winform程序主動觸發垃圾回收釋放內存

參考:https://bbs.csdn.net/topics/300138657

參考:https://blog.csdn.net/yyws2039725/article/details/85480263

c#的winform程序代碼上的寫法沒有使用stream後不關閉的情況,但運行時間長了,會存在內存明顯飆高,使用定時器定時調用以下方法,通知系統進行垃圾回收,並把不頻繁使用的代碼從物理內存放到磁盤虛擬內存中

 

/// <summary>
        /// 刷新內存
        /// </summary>
        public static void FlushMemory()
        {
            GarbageCollect();

            if (Environment.OSVersion.Platform == PlatformID.Win32NT)
            {
                SetProcessWorkingSetSize(System.Diagnostics.Process.GetCurrentProcess().Handle, -1, -1);
            }
        }

        /// <summary>
        /// 主動通知系統進行垃圾回收
        /// </summary>
        public static void GarbageCollect()
        {
            GC.Collect();
            GC.WaitForPendingFinalizers();
            GC.Collect();
        }

        /// <summary>
        /// 把不頻繁執行或者已經很久沒有執行的代碼,沒有必要留在物理內存中,只會造成浪費;放在虛擬內存中,等執行這部分代碼的時候,再調出來
        /// </summary>
        /// <param name="process"></param>
        /// <param name="minSize"></param>
        /// <param name="maxSize"></param>
        /// <returns></returns>
        [DllImport("kernel32.dll")]
        public static extern bool SetProcessWorkingSetSize(IntPtr process, int minSize, int maxSize);

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章