Autor Beitrag
Al Borland
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 16



BeitragVerfasst: Di 22.02.05 11:48 
Ich bin genervt... :motz:

Ich bin dabei eine ziemlich komplexe Komponente von D5 auf D6 zu portieren.
Das Ding ist ein Kartesisches Koordinaten System mit Zoom Funktion und allem PiPaPo.
In diesem System gibt es verschieden Datentypen bzw. Skalentypen:
Zeit/Datum, Float, Integer und Bool’sche Ausdrücke.

Damit ich alle diese Datentypen den Datenarrays zuweisen kann, übergebe ich die Daten als Varianten, die dann abhängig vom Datentyp in Integer umgerechnet werden.

Die Datenarrays hab ich von TList abgeleitet.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
  TVariantList = class(TList)
  private
    function GetValue(index: integer): Variant;
    procedure SetValue(index: integer; Value: Variant);
  public
    destructor Destroy; override;
    function Add(Value: Variant): integer;
    procedure Clear; override;
    procedure Delete(index: integer);
    procedure Expand(Amount: integer);
    function First: Variant;
    function IndexOf(Value: Variant): integer;
    procedure Insert(Index: Integer; Value: Variant);
    function Last: Variant;
    function Remove(Value: Variant): Integer;
    property Values[index: integer]: Variant read GetValue write SetValue; default;
  end;


Ok, Ok braucht den doppelten Speicherplatz eines Double Arrays, mit dem es auch gegangen wäre. Es ist aber praktisch. Nur leider, seit dem ich es portiert habe, läuft alles viel langsamer.
Was macht Delphi 6 anders? Ein paar Sachen sind mir aufgefallen:

D5 interpretiert Konstanten anders:
X := 500; VarType(X) liefert dann varCurrency !!!!! Bei D6 liefert VarType varWord!
Unter D6 gibt es die Unit Variants unter D5 nicht.
Irgendwas hat sich verändert, nur was? Wer hat Ideen - wo könnte diese Performance Einbuße herkommen? Sollte ich das lieber ohne Varianten machen? Liegt es an TList?
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Di 22.02.05 12:01 
Warum das nach der Umstellung langsamer wurde, kann ich dir leider nicht sagen. Aber Varianten sind immer langsamer, als feste Typen.
Eine andere Bremse können Try-Except in Schleifen sein. Besonders, wenn diese auch noch ausgelöst werden.