呼叫API函式減少c 記憶體占用

2022-10-10 13:42:11 字數 958 閱讀 6262

c#雖然內建垃圾**機制,但是並不能解決程式占用記憶體龐大的問題,如果我們仔細觀察任務管理器,我們會發現乙個程式如果最小化的時候,它所占用的會驟然減小,這時作業系統會把程式用不到的記憶體暫時放到虛擬記憶體中,當我們再把程式最大化時,發現記憶體並沒有完全的從虛擬記憶體調到記憶體中來,是因為作業系統的記憶體管理機制只呼叫目前需要的,那麼剩下的,有可能將來呼叫,有可能根本沒用。實現這個機理用到了乙個api函式setprocessworkingsetsize(),c#中宣告如下:

[dllimport("kernel32.dll", entrypoint = "setprocessworkingsetsize")]

public static extern int setprocessworkingsetsize(int hprocess, int dwminimumworkingsetsize, int dwmaximumworkingsetsize);

其中的引數內容:

hprocess:程序的控制代碼

dwminimumworkingsetsize:程序最小工作空間

dwmaximumworkingsetsize:程序最大工作空間

其中的hprocess,在c#中,如果限制當前編譯的程式,用getcurrentprocess()來獲得。

但是這麼做有一點要注意,在乙個程式中不宜經常使用這個函式,比方說,我為了減少我的程式記憶體占用,把dwminimumworkingsetsize、dwmaximumworkingsetsize的值都設定為最小,然後在設定乙個timer,每隔一會就呼叫這個函式一次,這樣看來程式占用記憶體時間少了,但是它帶來乙個很嚴重的弊端,作業系統為了實現限制記憶體的大小,會不斷的進行記憶體與虛擬記憶體之間的轉換,反而大大加重了作業系統的負擔,所以不宜常用。

用timer, 每幾秒鐘呼叫這個 

setprocessworkingsetsize(process.getcurrentprocess().handle.int32(), -1, -1);

減少mysql記憶體 減少mysql記憶體占用

小站點的伺服器一般在512m或1g左右,但是我們安裝的mysql 5.6 5.7預設啟動占用記憶體400多m,mysql記憶體佔用率明顯偏高,將會導致mysql崩潰,經常出現mysql自動停止的情況。mysql的使用記憶體可以優化的。主要有兩種方法 關閉performance schema和調整ms...

C 函式記憶體占用

乙個類的物件中是沒有關於普通成員函式的指標的slot,只有成員變數還有虛表指標,類的成員函式的 定義在pe檔案的 區,所以從程式載入時,就已經分配好了記憶體用於存放這些 執行時所需要的記憶體,比如棧 堆等等,則是 執行時才分配的 對於某個類的所有物件來說,類成員函式只在記憶體中有乙份拷貝,所有的物件...

減少VMware中虛擬系統占用的記憶體資源

最近,在學linux驅動,安裝乙個ubuntu10.4系統在vmware中,分配了700mb左右的記憶體。可是有乙個問題,因為很多操作都是在字元命令介面下完成的,基本上很少用到圖形介面,於是,就用windowsxp下telnet通過vmware提供的虛擬網路直接連線虛擬系統,這樣一來,感覺linux...