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

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

減少.NET應(yīng)用程序的內(nèi)存使用量?

減少.NET應(yīng)用程序的內(nèi)存使用量?

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

3 回答

?
鳳凰求蠱

TA貢獻(xiàn)1825條經(jīng)驗(yàn) 獲得超4個贊

與本地應(yīng)用程序相比,.NET應(yīng)用程序?qū)⒕哂懈蟮恼加每臻g,因?yàn)樗鼈兌急仨氃谶\(yùn)行時中加載運(yùn)行時和應(yīng)用程序。如果您想要真正整潔的東西,.NET可能不是最佳選擇。

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

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

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

  • 請注意,List<T>類似類型的設(shè)備在需要時會使容量增加一倍,因?yàn)樗鼈兛赡軐?dǎo)致多達(dá)50%的浪費(fèi)。

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

  • 避免使用超過85000字節(jié)的對象,因?yàn)樗鼈儗⑦M(jìn)入未壓縮的LOH,因此很容易碎片化。

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


查看完整回答
反對 回復(fù) 2019-11-08
?
LEATH

TA貢獻(xiàn)1936條經(jīng)驗(yàn) 獲得超7個贊

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

與該基準(zhǔn)程序的成本相比,構(gòu)建一個實(shí)際的應(yīng)用程序并查看其成本將更具啟發(fā)性。


查看完整回答
反對 回復(fù) 2019-11-08
  • 3 回答
  • 0 關(guān)注
  • 705 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號