參考: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);