TMemoryStream 存檔速度 |
缺席
|
small7011
一般會員 發表:19 回覆:34 積分:10 註冊:2007-07-24 發送簡訊給我 |
以下是要存取一個2維陣列的資料,基本上檔案至少都需要[10][5160]的陣列大小,但是存檔速度相當慢,請問各位大大有何方法可以改善呢?
TMemoryStream* pms = new TMemoryStream(); asFileName="AA.csv"; iFileHandle=FileCreate(asFileName); for (int j=1; j<=iResPixel;j ) { asMerge=asMerge AnsiString().sprintf("%2.4f",fSaveFile[1][j]); for (int i=2; i<=iTime;i ) { asMerge=asMerge AnsiString().sprintf(",%2.4f",fSaveFile[i][j]); } asMerge=asMerge AnsiString().sprintf("\x0d\x0a"); } pms->Write(asMerge.c_str(),asMerge.Length()); pms->Seek(0,0); //move point to file header if(iFileHandle<0) { Application->MessageBox(("Create File " asFileName " Error!").c_str(), "System", MB_OK | MB_ICONERROR); }else{ FileWrite(iFileHandle,pms->Memory,pms->Size); //write memory stream data to file at once FileClose(iFileHandle); //free } delete pms;
------
lee |
small7011
一般會員 發表:19 回覆:34 積分:10 註冊:2007-07-24 發送簡訊給我 |
這問題我已經解決,陣列迴圈會慢主要原因為AnsiString變數不斷累加造成資料量越來越大,處理時間也跟著增加
因此將字串適當清除即可改善 [code cpp] TMemoryStream* pms = new TMemoryStream(); asFileName="AA.csv"; iFileHandle=FileCreate(asFileName); for (int j=1; j<=iResPixel;j ) { asMerge=asMerge AnsiString().sprintf("%2.4f",fSaveFile[1][j]); for (int i=2; i<=iTime;i ) { asMerge=asMerge AnsiString().sprintf(",%2.4f",fSaveFile[i][j]); } asMerge=asMerge AnsiString().sprintf("\x0d\x0a"); pms->Write(asMerge.c_str(),asMerge.Length()); asMerge=""; } pms->Seek(0,0); //move point to file header if(iFileHandle<0) { Application->MessageBox(("Create File " asFileName " Error!").c_str(), "System", MB_OK | MB_ICONERROR); }else{ FileWrite(iFileHandle,pms->Memory,pms->Size); //write memory stream data to file at once FileClose(iFileHandle); //free } delete pms; [/code] ===================引 用 small7011 文 章=================== 以下是要存取一個2維陣列的資料,基本上檔案至少都需要[10][5160]的陣列大小,但是存檔速度相當慢,請問各位大大有何方法可以改善呢? TMemoryStream* pms = new TMemoryStream(); asFileName="AA.csv"; iFileHandle=FileCreate(asFileName); for (int j=1; j<=iResPixel;j ) { asMerge=asMerge AnsiString().sprintf("%2.4f",fSaveFile[1][j]); for (int i=2; i<=iTime;i ) { asMerge=asMerge AnsiString().sprintf(",%2.4f",fSaveFile[i][j]); } asMerge=asMerge AnsiString().sprintf("\x0d\x0a"); } pms->Write(asMerge.c_str(),asMerge.Length()); pms->Seek(0,0); //move point to file header if(iFileHandle<0) { Application->MessageBox(("Create File " asFileName " Error!").c_str(), "System", MB_OK | MB_ICONERROR); }else{ FileWrite(iFileHandle,pms->Memory,pms->Size); //write memory stream data to file at once FileClose(iFileHandle); //free } delete pms;
------
lee |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |