在win7 64位下,使用c++ builder6.0寫了一個檔案存盤程式,定時器相應函式里一次FileWrite 20M大小的資料,定時器時間間隔1000ms,當開始寫檔案的時候,系統記憶體一直在增加,停止寫檔案的時候,系統記憶體開始減少, 后來使用fwrite,系統記憶體也增加,使用vc 的CFile類,記憶體還是增加。 不知道這是什么原因,求大神幫忙。最近有個專案,要求存盤速度是200M沒秒,磁盤存盤速度是沒有問題的,就是開始存盤的時候,就是win 7 64位系統的記憶體一直增加,增加的特別高之后,軟體業卡死了,系統也很卡,不知道為什么,該怎么改善。求大神幫忙
uj5u.com熱心網友回復:
xp 下如何? win7 x86下如何?必須也測驗下。貼你的存盤代碼,俺也來測驗測驗

uj5u.com熱心網友回復:
代碼很簡單,只是測驗而已,在xp下記憶體不會增加。
代碼如下
全域變數:
int File_Num;
int Array[266144];
在建構式中:
for(int i=0; i<266144; i++)
{
Array[266144] = i;
}
File_Num = FileCreate("data.bin", fmOpenReadWrite);
Fomr1->Timer1->Enabled = true; //有個定時器,默認是關閉的,這里開啟,定時器時間間隔是1000ms。
定時器相應函式:
for(int i=0; i<40; i++)
{
FileWrite(File_Num, Array, 0x100000);
}
程式關閉的時候:
Form1->Timer1->Enabled = false;
FileClose(File_Num);
//------------------------------------------------------------------------
代碼就這些, 我用了好多寫盤函式,用過 write,fwrite,WriteFile,結果都一樣,都是在win 7 64位系統下記憶體增加,增加到一定的值之后不增加, 但實際的程式也是一個存盤的程式,記憶體增加的值特別大,最后導致系統特別卡,影響程式。 win 7 x86下待會試試
uj5u.com熱心網友回復:
既然你說xp下沒問題,那我也不試了,因為俺只有xp,沒有64位環境。還是得老妖給你解決
uj5u.com熱心網友回復:
哦,謝謝,win 7 32 也一樣記憶體增加uj5u.com熱心網友回復:
是不是有沒有關閉的句柄或未釋放的資源uj5u.com熱心網友回復:
試試:Form1->Timer1->Enabled = false;
for(int i=0; i<40; i++)
{
FileWrite(File_Num, Array, 0x100000);
}
Form1->Timer1->Enabled = true;
uj5u.com熱心網友回復:
不曉得, 就那么點代碼, 沒有動態申請記憶體
uj5u.com熱心網友回復:
才寫40M,記憶體增加沒增加根本看不出來
uj5u.com熱心網友回復:
用戶層寫資料到硬碟,最終都是呼叫windows的驅動程式,你只能在一定程度上通過CreateFile來指定如何寫資料,寫資料的程序中作業系統會根據需要增加、減少需要的快取。具體的詳細看看CreateFile這個函式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/140634.html
標籤:VCL組件使用和開發
