讓.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();
  GC.Collect();
  }

  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以下


免責聲明!

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



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