如何提高TStringList的乱序速度 |
尚未結案
|
power2010
一般會員 發表:10 回覆:11 積分:4 註冊:2004-11-11 發送簡訊給我 |
|
change.jian
版主 發表:29 回覆:620 積分:439 註冊:2003-06-02 發送簡訊給我 |
|
jest0024
高階會員 發表:11 回覆:310 積分:224 註冊:2002-11-24 發送簡訊給我 |
將字串改為指標,可提高不少的速度!!但相對的,自己要處理顯示方面的訊息
procedure TForm1.Button1Click(Sender: TObject); var i,d:Integer; p:PString; begin D:=TimeGetTime; ListBox1.Items.BeginUpdate; ListBox1.Items.Clear; for i:=0 to 350000 do begin New(p); p^:=IntToStr(I); ListBox1.Items.AddObject('',TObject(p)); end; ListBox1.Items.EndUpdate; Caption:=IntToStr(TimeGetTime-d); end; procedure TForm1.Button2Click(Sender: TObject); var i,j,d:Integer; p :TObject; begin d:=TimeGetTime; ListBox1.Items.BeginUpdate; for i:=0 to ListBox1.Items.Count-1 do begin j:=Random(ListBox1.Items.Count-1); p:=ListBox1.Items.Objects[i]; ListBox1.Items.Objects[i]:=ListBox1.Items.Objects[j]; ListBox1.Items.Objects[j]:=p; end; ListBox1.Items.EndUpdate; Caption:=IntToStr(TimeGetTime-d); end; procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); var p:PString; begin p:=PString(ListBox1.Items.Objects[Index]); if p<>nil then begin ListBox1.Canvas.FillRect(Rect); ListBox1.Canvas.TextOut(Rect.Left 2,Rect.Top 2,p^); end; end;發表人 - jest0024 於 2005/05/20 19:49:26 |
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
事實上,沒有必要搞的那麼偏。 建議將精力放在亂數排序及其他的解決方法。
例如:
1.Memo1.Lines.Move(i,Random(Memo1.Lines.count-1));
將來源搬移到目的,相對的目的應該可以不需要在做。
那麼使用的時間至少減少一半。
可以找一下這方面資料,有些書籍會寫得比較詳細。 2.不要使用Application.ProcessMessages
使用 Application.ProcessMessages 倒不如直接 Memo1.Repaint;
而且你使用了BeginUpdate 已將其 Lock
基本上就已經不會刷新 Memo1 。把他刪掉直接一點。 參考 ~~~~~~~~~~~
難得聰明,常常糊塗。
~~~~~~~~~~~
|
pcboy
版主 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
不要用 Move, 可能會動到很多行, 直接將兩行做交換
for i:=0 to Memo1.Lines.Count-1 do begin temp:=Memo1.Lines[Random(Memo1.Lines.count-1)]; Memo1.Lines[Random(Memo1.Lines.count-1)] := Memo1.Lines[i]; Memo1.Lines[i] := temp; end;********************* 如果您滿意答案,請結案 *********************
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案! 子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問! |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |