Ich bin genervt...
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.
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?