欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C# WinForm應用程序降低系統(tǒng)內存占用方法總結

 更新時間:2014年10月24日 15:29:44   投稿:junjie  
這篇文章主要介紹了C# WinForm應用程序降低系統(tǒng)內存占用方法總結,本文總結了9個方法,同時給出了一個定期清理執(zhí)行垃圾回收代碼,需要的朋友可以參考下

背景:

微軟的 .NET FRAMEWORK 現(xiàn)在可謂如火如荼了。但是,.NET 一直所為人詬病的就是“胃口太大”,狂吃內存,雖然微軟聲稱 GC 的功能和智能化都很高,但是內存的回收問題,一直存在困擾,尤其是 winform 程序,其主要原因是因為.NET程序在啟動時,是需要由JIT動態(tài)編譯并加載的,這個加載會把所有需要的資源都加載進來,很多資源是只有啟動時才用的。

以XP 系統(tǒng)為例子,程序啟動后,打開任務管理器,會看到占用的內存量比較大,你把程序最小化,會發(fā)現(xiàn)該程序占用的內存迅速減小到一個很小的值,再恢復你的程序,你會發(fā)現(xiàn)內存占用又上升了,但是比你剛啟動時的內存占用值還是小的,這就是一個資源優(yōu)化的過程,這個過程是操作系統(tǒng)主動完成的。

結論與展望:

創(chuàng)新設計大賽的項目已經(jīng)快到交付的日期了,都說Winform占用內存大,于是想著看看自己寫的基于手機郵件的遠程關機軟件(Mail_Based_Remote_Shutdown)占用內存情況,整個開發(fā)過程自己也在盡量寫一些比較優(yōu)美的代碼來減少系統(tǒng)內存占用,今天看了下,剛打開時占用20M內存,然后一點點增加,最后到80多M,真是無法忍受,每次都是寫了之后回過頭來才發(fā)現(xiàn)自己的代碼很丑,系統(tǒng)架構師的作用就體現(xiàn)出來了。

這里整理了一些網(wǎng)上關于Winform如何降低系統(tǒng)內存占用的資料,供參考:

1、使用性能測試工具dotTrace 3.0,它能夠計算出你程序中那些代碼占用內存較多
2、強制垃圾回收
3、多dispose,close
4、用timer,每幾秒鐘調用:SetProcessWorkingSetSize(Process.GetCurrentProcess().Handle, -1, -1);具體見附錄。
5、發(fā)布的時候選擇Release
6、注意代碼編寫時少產(chǎn)生垃圾,比如String + String就會產(chǎn)生大量的垃圾,可以用StringBuffer.Append
7、this.Dispose();    this.Dispose(True);   this.Close();    GC.Collect();  
8、注意變量的作用域,具體說某個變量如果只是臨時使用就不要定義成成員變量。GC是根據(jù)關系網(wǎng)去回收資源的。
9、檢測是否存在內存泄漏的情況,詳情可參見:內存泄漏百度百科

附錄:定期清理執(zhí)行垃圾回收代碼:

復制代碼 代碼如下:

//在程序中用一個計時器,每隔幾秒鐘調用一次該函數(shù),打開任務管理器,你會有驚奇的發(fā)現(xiàn)
 
#region 內存回收
[DllImport("kernel32.dll", EntryPoint = "SetProcessWorkingSetSize")]
public static extern int SetProcessWorkingSetSize(IntPtr process, int minSize, int maxSize);
/// <summary>
/// 釋放內存
/// </summary>
public static void ClearMemory()
{
GC.Collect();
GC.WaitForPendingFinalizers();
if (Environment.OSVersion.Platform == PlatformID.Win32NT)
{
App.SetProcessWorkingSetSize(System.Diagnostics.Process.GetCurrentProcess().Handle, -1, -1);
}
}
#endregion

相關文章

  • c#可以創(chuàng)建任意控件的拖動方法

    c#可以創(chuàng)建任意控件的拖動方法

    下面小編就為大家分享一篇c#可以創(chuàng)建任意控件的拖動方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • 關于c#中單例模式的一些問題

    關于c#中單例模式的一些問題

    這篇文章主要給大家介紹了關于c#中單例模式的一些問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • C#語法糖(Csharp Syntactic sugar)大匯總

    C#語法糖(Csharp Syntactic sugar)大匯總

    首先需要聲明的是“語法糖”這個詞絕非貶義詞,它可以給我?guī)矸奖悖且环N便捷的寫法,編譯器會幫我們做轉換;而且可以提高開發(fā)編碼的效率,在性能上也不會帶來損失。這讓java開發(fā)人員羨慕不已,呵呵。
    2010-06-06
  • 詳解C# Socket編程筆記

    詳解C# Socket編程筆記

    這篇文章主要介紹了詳解C# Socket編程筆記,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧。
    2016-12-12
  • WinForm調用jar包的方法分析

    WinForm調用jar包的方法分析

    這篇文章主要介紹了WinForm調用jar包的方法,結合實例形式分析了WinForm調用jar包的原理、實現(xiàn)技巧與相關注意事項,需要的朋友可以參考下
    2017-05-05
  • 同步調用和異步調用WebService

    同步調用和異步調用WebService

    本文給大家介紹webservice同步調用和異步調用,同步調用就是一個同步操作會阻塞整個當前的進程,直到這個操作完成才能執(zhí)行下一段代碼,異步調用不會阻塞啟動操作的調用線程,調用程序必須通過輪流檢測,或者等待完成信號來發(fā)現(xiàn)調用的完成。小伙伴們跟著小編一起學習
    2015-09-09
  • c# 通過代碼開啟或關閉防火墻

    c# 通過代碼開啟或關閉防火墻

    這篇文章主要介紹了c# 通過代碼開啟或關閉防火墻的示例,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2020-10-10
  • C#中Linq延遲查詢的例子

    C#中Linq延遲查詢的例子

    這篇文章主要介紹了C#中Linq延遲查詢的例子,本文用一個實例來講解延遲查詢的使用,需要的朋友可以參考下
    2015-06-06
  • C#網(wǎng)絡編程基礎之進程和線程詳解

    C#網(wǎng)絡編程基礎之進程和線程詳解

    這篇文章主要介紹了C#網(wǎng)絡編程基礎之進程和線程詳解,本文對進程、線程、線程池知識做了淺顯易懂的講解,并配有代碼實例,需要的朋友可以參考下
    2014-08-08
  • c#注冊客戶端事件示例

    c#注冊客戶端事件示例

    這篇文章主要介紹了c#注冊客戶端事件使用示例,大家參考使用吧
    2014-01-01

最新評論