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

讀檔時發生out of memory

答題得分者是:jow
pgd
一般會員


發表:4
回覆:17
積分:9
註冊:2004-11-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-10-26 13:52:20 IP:61.230.xxx.xxx 未訂閱

[code cpp]

TStrings *LoadData= new TStringList;
LoadData->LoadFromFile(FileName);
LoadData->Delimiter = ' ';
LoadData->DelimitedText = LoadData->Text;
[/code]
結果出現Out of Memory,請問這是為什麼呢。
還是因為我讀的檔案太大,那這樣有辦法克服嗎?
christie
資深會員


發表:30
回覆:299
積分:475
註冊:2005-03-25

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-10-26 15:12:58 IP:61.59.xxx.xxx 未訂閱
//試試
TStrings *LoadData= new TStringList;
TStrings *DelimDta= new TStringList;
LoadData->LoadFromFile(FileName);
DelimDta->Delimiter = ' ';
DelimDta->DelimitedText = LoadData->Text;
------
What do we live for if not to make life less difficult for each other?
jow
尊榮會員


發表:66
回覆:751
積分:1253
註冊:2002-03-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-10-26 15:17:01 IP:210.66.xxx.xxx 訂閱
TStringLIst 內的 Item 數量是有限的..., 可是也夠大了
除非你的檔案真的是夠大了... >"<

你可以簡單描述你的檔案格式和檔案長度?
看看有沒有其他方式可以處理... ^_^ "


以下節錄自Class.pas

{ Maximum TList size }
MaxListSize = Maxint div 16;

{ TStringList class }

TStringList = class;

PStringItem = ^TStringItem;
TStringItem = record
FString: string;
FObject: TObject;
end;

PStringItemList = ^TStringItemList;
TStringItemList = array[0..MaxListSize] of TStringItem;

因此一個TStringItem所佔的記憶體大約是:

SizeOf(TStringItem) Length(FString) FObject.InstanceSize();


編輯記錄
jow 重新編輯於 2007-10-26 15:18:55, 註解 無‧
pgd
一般會員


發表:4
回覆:17
積分:9
註冊:2004-11-10

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-10-26 15:29:23 IP:61.230.xxx.xxx 未訂閱
大概有2000*50000個數字,TXT檔有一百多MB
是還滿大的。前輩有什麼好的建議嗎?
jow
尊榮會員


發表:66
回覆:751
積分:1253
註冊:2002-03-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-10-26 15:40:18 IP:210.66.xxx.xxx 訂閱
你可以將TXT檔轉換成Binary File, 再以TFileStream來處理,就不
必將整個檔案載入memory來處理了...

你先參考以下的篇幅, 看看是否有幫助... ^_^

http://delphi.ktop.com.tw/board.php?cid=168&fid=1499&tid=90919

http://delphi.ktop.com.tw/board.php?cid=168&fid=1499&tid=90956

===================引 用 pgd 文 章===================
大概有2000*50000個數字,TXT檔有一百多MB
是還滿大的。前輩有什麼好的建議嗎?
編輯記錄
jow 重新編輯於 2007-10-26 15:41:15, 註解 無‧
pgd
一般會員


發表:4
回覆:17
積分:9
註冊:2004-11-10

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-10-29 16:15:34 IP:61.230.xxx.xxx 未訂閱
jow大,我研究後,請問你的意思是我先把我的資料存成二值檔案,
再用你連結中所說的讀檔方式來讀檔嗎?
===================引 用 jow 文 章===================
你可以將TXT檔轉換成Binary File, 再以TFileStream來處理,就不
必將整個檔案載入memory來處理了...

你先參考以下的篇幅, 看看是否有幫助... ^_^

http://delphi.ktop.com.tw/board.php?cid=168&fid=1499&tid=90919

http://delphi.ktop.com.tw/board.php?cid=168&fid=1499&tid=90956

===================引 用 pgd 文 章===================
大概有2000*50000個數字,TXT檔有一百多MB
是還滿大的。前輩有什麼好的建議嗎?
pgd
一般會員


發表:4
回覆:17
積分:9
註冊:2004-11-10

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-11-05 08:41:22 IP:60.249.xxx.xxx 未訂閱
測試後問題已解決囉,謝謝jow。
系統時間:2024-05-07 21:58:53
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!