1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91:
| const ItmN = 50000; RndN = 1000000; SeqN = 10000;
procedure TForm1.FormCreate(Sender: TObject); var i: Integer; begin NList := TList.Create; DList := TDoubleLinkedList.Create; for i := 0 to ItmN do begin NList.Add(Pointer(i)); DList.Add(Pointer(i)); end; randomize; end;
procedure TForm1.Button1Click(Sender: TObject); var i, value: Integer; var fStartTime, fStopTime, fFrequency: Int64; var rnd: Integer; begin QueryPerformanceFrequency(fFrequency); rnd := NList.Count;
QueryPerformanceCounter(fStartTime); for i := 0 to RndN do begin value := Integer(NList[random(rnd)]); end; QueryPerformanceCounter(fStopTime);
Button1.Caption := 'normal List random:' + FloatToStr(RoundTo((fStopTime-fStartTime)/fFrequency, -3)); end;
procedure TForm1.Button2Click(Sender: TObject); var i, value: Integer; var fStartTime, fStopTime, fFrequency: Int64; var rnd: Integer; begin QueryPerformanceFrequency(fFrequency); rnd := DList.Count;
QueryPerformanceCounter(fStartTime); for i := 0 to RndN do begin value := Integer(DList[random(rnd)]); end; QueryPerformanceCounter(fStopTime);
Button2.Caption := 'linked List random:' + FloatToStr(RoundTo((fStopTime-fStartTime)/fFrequency, -3)); end;
procedure TForm1.Button3Click(Sender: TObject); var i, j, value: Integer; var fStartTime, fStopTime, fFrequency: Int64; var rnd: Integer; begin QueryPerformanceFrequency(fFrequency); rnd := NList.Count;
QueryPerformanceCounter(fStartTime); for i := 0 to SeqN do begin for j := 0 to NList.Count-1 do NList[j] := Pointer(j); end; QueryPerformanceCounter(fStopTime);
Button3.Caption := 'normal List sequensiell:' + FloatToStr(RoundTo((fStopTime-fStartTime)/fFrequency, -3)); end;
procedure TForm1.Button4Click(Sender: TObject); var i, j, value: Integer; var item: TListItem; var fStartTime, fStopTime, fFrequency: Int64; var rnd: Integer; begin QueryPerformanceFrequency(fFrequency); rnd := DList.Count;
QueryPerformanceCounter(fStartTime); for i := 0 to SeqN do begin item := DList.Items[0]; j := 0; while Item <> nil do begin Item.Value := Pointer(j); Item := Item.Next; end; end; QueryPerformanceCounter(fStopTime);
Button4.Caption := 'linked List sequensiell:' + FloatToStr(RoundTo((fStopTime-fStartTime)/fFrequency, -3)); end; |