第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

減少.NET應用程序的內存使用量?

減少.NET應用程序的內存使用量?

函數式編程 2019-11-08 14:04:38
有什么技巧可以減少.NET應用程序的內存使用?考慮以下簡單的C#程序。class Program{    static void Main(string[] args)    {        Console.ReadLine();    }}在x64的發(fā)布模式下編譯并在Visual Studio外部運行,任務管理器報告以下內容:Working Set:          9364kPrivate Working Set:  2500kCommit Size:         17480k如果只為x86編譯會更好一些:Working Set:          5888kPrivate Working Set:  1280kCommit Size:          7012k然后,我嘗試了以下程序,該程序執(zhí)行相同的操作,但嘗試在運行時初始化后減小進程大?。篶lass Program{    static void Main(string[] args)    {        minimizeMemory();        Console.ReadLine();    }    private static void minimizeMemory()    {        GC.Collect(GC.MaxGeneration);        GC.WaitForPendingFinalizers();        SetProcessWorkingSetSize(Process.GetCurrentProcess().Handle,            (UIntPtr) 0xFFFFFFFF, (UIntPtr)0xFFFFFFFF);    }    [DllImport("kernel32.dll")]    [return: MarshalAs(UnmanagedType.Bool)]    private static extern bool SetProcessWorkingSetSize(IntPtr process,        UIntPtr minimumWorkingSetSize, UIntPtr maximumWorkingSetSize);}在Visual Studio外部發(fā)布的x86 上的結果:Working Set:          2300kPrivate Working Set:   964kCommit Size:          8408k這樣做更好一些,但是對于這樣一個簡單的程序來說似乎仍然過多。有什么技巧可以使C#流程更精簡嗎?我正在編寫一個旨在大多數時候在后臺運行的程序。我已經在單獨的“ 應用程序域”中進行了任何用戶界面操作,這意味著可以安全地卸載用戶界面操作,但是僅在后臺使用時要占用10 MB的空間。PS關于我為什么要關心---(高級)用戶傾向于擔心這些事情。即使對性能幾乎沒有影響,精通半技術的用戶(我的目標受眾)也傾向于對后臺應用程序的內存使用情況感到不滿。甚至當我看到Adobe Updater占用11 MB的內存并因Foobar2000的平穩(wěn)觸摸而感到安慰時,即使我在播放時,它也占用不到6 MB的內存,我也感到非常驚訝。我知道在現代操作系統(tǒng)中,這些東西實際上在技術上并沒有多大關系,但這并不意味著它對感知沒有影響。
查看完整描述

3 回答

?
鳳凰求蠱

TA貢獻1825條經驗 獲得超4個贊

與本地應用程序相比,.NET應用程序將具有更大的占用空間,因為它們都必須在運行時中加載運行時和應用程序。如果您想要真正整潔的東西,.NET可能不是最佳選擇。

但是,請記住,如果您的應用程序大部分時間處于睡眠狀態(tài),則必要的內存頁面將被換出內存,因此在大多數情況下,實際上并不會給系統(tǒng)造成太大的負擔。

如果要減小占用空間,則必須考慮內存使用情況。這里有一些想法:

  • 減少對象的數量,并確保不要將任何實例保留的時間都超過所需的時間。

  • 請注意,List<T>類似類型的設備在需要時會使容量增加一倍,因為它們可能導致多達50%的浪費。

  • 您可以考慮使用值類型而不是引用類型,以在堆棧上強制使用更多內存,但是請記住,默認堆??臻g僅為1 MB。

  • 避免使用超過85000字節(jié)的對象,因為它們將進入未壓縮的LOH,因此很容易碎片化。

無論如何,這可能不是一個詳盡的清單,而只是幾個想法。


查看完整回答
反對 回復 2019-11-08
?
LEATH

TA貢獻1936條經驗 獲得超7個贊

在這種情況下,您需要考慮的一件事是CLR的內存成本。為每個.Net進程加載CLR,因此會考慮內存因素。對于這樣的簡單/小型程序,CLR的成本將決定您的內存占用量。

與該基準程序的成本相比,構建一個實際的應用程序并查看其成本將更具啟發(fā)性。


查看完整回答
反對 回復 2019-11-08
  • 3 回答
  • 0 關注
  • 722 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號