天天看點

讓.NET程式快速釋放記憶體的辦法

公司裡的一個程式,經過了N個人的手後發現上了生産記憶體會一直漲,直到實體記憶體幾乎被占用完畢後突然就下降下來(估計是GC給釋放了),然後再一直漲。這個程式主要是對字元串進行處理,困擾了我好幾天,本機測試記憶體也有增長的趨勢,但是不大明顯,上生産是2、3分鐘記憶體就上G,沒找到究竟哪裡的問題。

從網上搜了些資料,看到可以讓.NET立即釋放記憶體,本地簡單測試了一下,真的管用,但是沒敢用,不知道對于多線程的程式,當一個線程顯示釋放記憶體時會不會影響到其他線程,而且我是做金融行業程式的,程式萬一出問題就是事故,是以請教一下各位高人,這段代碼是否會影響程式的穩定性?

釋放記憶體的代碼如下:

[DllImport("kernel32.dll")]

  public static extern bool SetProcessWorkingSetSize(IntPtr process, int minSize, int maxSize);

public static void GarbageCollect()

  {

  GC.Collect();

  GC.WaitForPendingFinalizers();

  }

  public static void FlushMemory()

  GarbageCollect();

  if (Environment.OSVersion.Platform == PlatformID.Win32NT)

  Win32.SetProcessWorkingSetSize(System.Diagnostics.Process.GetCurrentProcess().Handle, -1, -1);

NET裡面還有一個類可以達到這個效果

  System.Diagnostics.Process.GetCurrentProcess().MinWorkingSet = new System.IntPtr(5);

采用定時釋放+窗體打開的時候,效果很好,估計程式占的記憶體會在20以下