TMemoryStream? |
答題得分者是:dllee
|
phototin
初階會員 發表:13 回覆:30 積分:29 註冊:2002-06-15 發送簡訊給我 |
|||||
tony115722
一般會員 發表:53 回覆:63 積分:23 註冊:2002-07-09 發送簡訊給我 |
|||||
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 問題一: TMemoryStream *memstream = new TMemoryStream(); 請問, memstream->clear(); delete memstream; memstream->free(); 這三行有何不同? 問題二: 我的程式需要不斷的儲存資料至記憶體, 該如何在正確時機, 建立→儲存→清除→儲存→清除→…→最後釋放TMemoryStream, 才不會導致記憶體被我耗完?提供給你「我的做法」 你可以做一個小小的實驗 也就是寫一個很簡單的 function 如下 void __fastcall TForm1::XXXX(void) { TMemoryStream *ms=new TMemoryStream; ms->Size=1024; ms->Position=0; ms->Write(Buf, ms->Size); .............. ms->Size=0; ms->Size=2048; ms->Position=0; ms->Write(Buf, ms->Size); .............. delete ms; } // end of XXXX 備註:假設 Buf 是個塊存有資料的記憶體 然後用一個 Timer 去不斷的 run 這個 function 在 run 的同時,你把「工作管理員」打開 選擇「效能」這個 tab 仔細觀查 memory 的變化 當然~~你如果覺得變化不大 可以把以上 code 中的 size 加大(便於觀查) 你會發現這種做法是沒有問題的 至於 clear 和 free 我並沒有用過 因此~~我不敢亂說 話雖然如此~~ 但是只用 new 和 delete 也可以達到目的 希望對你有所幫助
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
||||
phototin
初階會員 發表:13 回覆:30 積分:29 註冊:2002-06-15 發送簡訊給我 |
|||||
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
引言: 問題一: TMemoryStream *memstream = new TMemoryStream(); 請問, memstream->clear(); delete memstream; memstream->free(); 這三行有何不同? 問題二: 我的程式需要不斷的儲存資料至記憶體, 該如何在正確時機, 建立→儲存→清除→儲存→清除→…→最後釋放TMemoryStream, 才不會導致記憶體被我耗完?如同 RaynorPao 提供的範例,在 ms->Size=1024; 時,其實是會叫用 TMemoryStream 的 SetSize() 由它去動態改變 TMemoryStream 所占用的記憶體。 其實小弟在使用 TMemoryStream 時,也是如同您問題二所述,在物件的建構元中就將 TMemoryStream 給 new 出來,而在其他 Method 中則去改變大小或 Clear()、Read/WriteBuffer()... 而在最後解構元中再去 delete 它就可以了。 而 memstream->Free(); 是不可以叫用的,這個 Free() 是繼承自 TObject 的東東,在你下 delete memstream; 時就會叫用它了,在 BCB 的說明中也提到這個 Free() 不可以直接叫用。 如果你只是要清除 TMemoryStream 所占用的記憶體可以用 Clear() 或 Size=0 而使用 TMemoryStream 最大的好處是不會有「記憶體被我耗完?」的問題,當然,如果你就是要一個很大很大的記憶體那還是會耗完,如果只是 Size=1000; 再 Size=200000; 再 Size=1000000; 再 Size=1000; ... 那它所占的就是你所指定的大小,而會發生浪費記憶體的情況是,在不用時沒有 delete 掉它,才會發生浪費的情況。 沒空更新的網頁...
------
http://www.ViewMove.com |
||||
phototin
初階會員 發表:13 回覆:30 積分:29 註冊:2002-06-15 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |