簡體   English   中英

隨機RAM使用量

[英]Random RAM usage amounts

我希望有人能解釋為什么我的應用程序在加載時使用不同數量的RAM。 我說的是直接使用exe的編譯版本。 這是一個非常基本的應用程序,在應用程序啟動時沒有條件分支。 但是,每次啟動時,RAM大小從6MB-16MB不等。

我知道無論如何它只是用處很小,但是我很好奇為什么會這樣。

編輯:對應用程序的實際操作進行更多說明。
這是一個WinForm項目。
它使用sqlclient連接到數據庫以檢索服務器列表。
基於該列表,創建了一系列按鈕來啟動和停止這些服務器上的服務。
使用System.Timers類每20秒審核一次這些服務器上的服務狀態。
此時,應用程序位於此處,並通過單擊按鈕之一來等待用戶輸入以啟動/停止服務。

這里的竅門是任務計划報告的RAM數量不是應用程序使用的RAM數量。 而是保留供應用程序使用的RAM量。

請記住,使用.Net這樣的托管框架,您不會直接請求或釋放內存。 而是由垃圾收集器為您管理內存。 在給定時間為您的應用程序保留的內存量可能會有所不同,並且取決於許多不同的因素,包括當時其他程序所創建的內存壓力。

可以這樣考慮:如果您的應用程序需要10 MB的RAM,那么在10個請求/釋放中一次將其請求並返回到操作系統1 MB更快,還是一次請求/釋放一次保留該塊會更快嗎? ? 現在將其擴展到一個方案,在該方案中您不知道到底需要多少RAM,而只是知道它在10 MB附近。 此外,您的計算機還有1 GB閑置空間。 當然,最好的辦法是占用可用RAM的較大塊。 相對於未使用的內存,即使20或30 MB也不會是不合理的,因為未使用的RAM會浪費性能。

如果您的系統以后開始感覺到一些內存壓力,那么.Net可以輕松地將一些RAM返回給系統。 這是托管語言有時可以提供比具有傳統內存管理的C ++之類的語言更好的性能的一種方法:一種垃圾收集器,可以在分配內存時更輕松地考慮整個系統的運行狀況。

您正在使用什么來確定正在“使用”多少內存。 即使使用常規應用程序,Windows也會提前積極分配未使用的內存,而使用.NET應用程序,則實際上要使用多少內存以及Windows僅增加了多少內存就變得更加復雜,以便在需要時可以立即使用。 如果另一個應用程序實際請求內存,則該保留的內存將被重新利用。

一種檢查方法是最小化應用程序(至少在XP上是如此)。 如果您在任務管理器等中查看內存使用情況,您會發現它會立即消失,從而消除了分配的看似“隨機”數量。

它可能與抖動有關,在第一次加載后,抖動已經創建了一個編譯版本,因此不需要運行。 除此之外,您還必須向我們提供有關該應用程序以及您指的是哪種內存的更多詳細信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM