記憶體最佳化軟體使用的是一種手段

來源:互聯網
上載者:User

一個空白WinForm在工作管理員中都佔用幾十兆記憶體,的確有點可怕!通常有3種方法:                 

1. 不要管他。 

CLR & GC 會自動管理記憶體佔用,根據當前環境參數自動調整,這樣會得到一個最佳化的運行效率。

2. 設定託管程式進程允許的最大工作集大小。
1 Process.GetCurrentProcess().MaxWorkingSet = (IntPtr)(1024 * 1024 * 5

1 Process.GetCurrentProcess().MaxWorkingSet = (IntPtr)(1024 * 1024 * 5);

3. 使用SetProcessWorkingSetSize,將部分實體記憶體佔用轉移到虛擬記憶體。
1 [DllImport("kernel32.dll")]
2 public static extern bool SetProcessWorkingSetSize(IntPtr proc, int min, int max );
3     
4 private void button1_Click(object sender, System.EventArgs e)
5 {
6   SetProcessWorkingSetSize(Process.GetCurrentProcess().Handle, -1, -1);

1 [DllImport("kernel32.dll")]
2 public static extern bool SetProcessWorkingSetSize(IntPtr proc, int min, int max );
3     
4 private void button1_Click(object sender, System.EventArgs e)
5 {
6   SetProcessWorkingSetSize(Process.GetCurrentProcess().Handle, -1, -1);
7 }

注意第2,3種方法在某種程度上都會影響程式的效能。設定一個合理的工作集大小,或者在程式啟動後,空閑時(Application.Idle)使用SetProcessWorkingSetSize,還是可以的,畢竟減少記憶體佔用對於系統運行也有一定的益處。

 

使用案例:
 1 private void timer1_Tick(object sender, System.EventArgs e)
 2 {
 3   // 使用定時器將當前實體記憶體佔用(MB)添加到列表框中。
 4   string s = string.Format("{0}", Process.GetCurrentProcess().WorkingSet / 1024 / 1024);
 5   this.listBox1.Items.Insert(0, s);
 6 }
 7 
 8 [DllImport("kernel32.dll")]
 9 public static extern bool SetProcessWorkingSetSize(IntPtr proc, int min, int max );
10     
11 private void button1_Click(object sender, System.EventArgs e)
12 {
13   // 減少記憶體佔用
14   SetProcessWorkingSetSize(Process.GetCurrentProcess().Handle, -1, -1);
15 

 1 private void timer1_Tick(object sender, System.EventArgs e)
 2 {
 3   // 使用定時器將當前實體記憶體佔用(MB)添加到列表框中。
 4   string s = string.Format("{0}", Process.GetCurrentProcess().WorkingSet / 1024 / 1024);
 5   this.listBox1.Items.Insert(0, s);
 6 }
 7 
 8 [DllImport("kernel32.dll")]
 9 public static extern bool SetProcessWorkingSetSize(IntPtr proc, int min, int max );
10     
11 private void button1_Click(object sender, System.EventArgs e)
12 {
13   // 減少記憶體佔用
14   SetProcessWorkingSetSize(Process.GetCurrentProcess().Handle, -1, -1);
15 }

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.