全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1515
推到 Plurk!
推到 Facebook!

TMemoryStream 存檔速度

缺席
small7011
一般會員


發表:19
回覆:34
積分:10
註冊:2007-07-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2010-06-17 16:05:12 IP:211.72.xxx.xxx 訂閱
以下是要存取一個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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2012-10-03 09:40:47 IP:211.72.xxx.xxx 訂閱
這問題我已經解決,陣列迴圈會慢主要原因為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_IC==================引 用 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
系統時間:2017-12-14 8:43:00
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!