AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Eine Frage der Performance - T(Object)List oder Dyn. Array?
Thema durchsuchen
Ansicht
Themen-Optionen

Eine Frage der Performance - T(Object)List oder Dyn. Array?

Ein Thema von Mithrandir · begonnen am 11. Mai 2009 · letzter Beitrag vom 19. Mai 2009
 
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#28

Re: Eine Frage der Performance - T(Object)List oder Dyn. Arr

  Alt 15. Mai 2009, 15:34
Sry, Doppelposting, aber:

Um das Problem zu isolieren, habe ich mal eine kleine Test-App geschrieben. Sie befindet sich im Anhang, das Listing im Posting. Ich bin jedenfalls noch nicht weitergekommen..

Der Aufbau entspricht in etwa dem in der "echten" Anwendung.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Unit2, csDictionary;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    procedure AddItem(Node: TORPNode);
    function ReadItem(ID: Cardinal): TORPNode;
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  Dict: TIntegerDictionary;

implementation

{$R *.dfm}

function TForm1.ReadItem(ID: Cardinal): TORPNode;
var
  pter: Pointer;
begin
  Dict.Find(ID, pter);
  Result := TORPNode(pter^);
end;

procedure TForm1.AddItem(Node: TORPNode);
begin
  Dict.Add(Node.ID, Pointer(Node));
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
  fNode: TORPNode;
begin
  Button2.Enabled := false;
  for i := 0 to 1000 do
    begin
      fNode := TORPNode.Create;
      fNode.ID := i;
      fNode.Trst := Random(300000);
      AddItem(fNode);
    end;
  ShowMessage('Liste erstellt.');
  Button2.Enabled := true;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  i: Integer;
  fNode: TORPNode;
begin
  i := Random(1000);
  fNode := ReadItem(i);
  if fNode <> nil then
   begin
    Memo1.Lines.Add(IntToStr(fNode.ID));
    Memo1.Lines.Add('---------');
    Memo1.Lines.Add(IntToStr(fNode.Trst));
    Memo1.Lines.Add('');
   end
   else
    Memo1.Lines.Add('Misslungen...');
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  FreeAndNil(dict);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  dict := TIntegerDictionary.Create;
  Button2.Enabled := false;
end;

end.


unit Unit2;

interface

Type
  TORPNode = class(TObject)
    ID : Cardinal;
    Trst: Integer;
  end;

implementation

end.
Angehängte Dateien
Dateityp: zip testliste_560.zip (245,2 KB, 13x aufgerufen)
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz