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

來源:互聯網
上載者:User

標籤:os   io   for   ar   問題   代碼   new   size   

公司裡的一個程式,經過了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以下

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.