Hallo alle!
ich hab mal wieder ein neues Problem. Ich habe vor einen Urlaubsplaner
zu schreiben, das Problem ist auch nicht der Code oder die Logik oder so.
Ich habe das Problem das mein Urlaubsplaner recht langsam ist, und je
mehr elemente ich in mein Dynamisches Array hänge desto länger braucht
er um ein einzelnes Element anzuhängen. Ich habe mir ausgerechnet was
ein Objekt anhand meiner Variablen für Speicher verbrauchen würde.
Aber wenn ich meinen verbrauchten Speicher nach dem laden durch die
anzahl der tage*personen teile bekomme ich einen viel größeren wert für
ein element raus
Meine beiden Probleme sind also die typischen: Wie spare ich Speicher und
wie bekomm ich den ganzen kram schneller? anstatt eines dynamischen arrays
eine tlist benutzen? oder doch lieber selber ne zweifach verkettte
dynamische liste (müsste vom prinzip ja sowas sein wie die tlist, halt
bloss selber)? ich weiss da echt nicht weiter.
Ich habe getestet auf ner guten maschine (p4-2ghz,256mb) und er hat bei
11 personen für das ganze jahr 2003 8mb speicher verballert und 15 sek.
gebraucht. bei 70 personen habe ich nach 5 minuten und 150mb das
programm abgebrochen
(
nachstehend mal n bisschen code:
Delphi-Quellcode:
type
TMyCoords = Packed Record
Column: Word;
Row: Word;
Top: Word;
Left: Word;
Bottom: Word;
Right: Word;
End;
TMyInformation = Packed Record
msdDay: TDate;
msdWDay: String[12];
msdPerson: String[50];
msdPersonNR: String[5];
msdActualKosten: String[5];
msdNormalKosten: String[5];
End;
TMySpecialDay = class(TShape)
mytitel: TStaticText;
constructor NCreate ( how: TCreateIt ); // Constructor
destructor Destroy; override; // Destructor
private
msdID: Integer;
msdState: Word;
// ---
msdCoords: TMyCoords;
msdInfo: TMyInformation;
// ---
msdChanged: Boolean;
msdStatebeforeChange: Word;
msdSelected: Boolean;
public
procedure onMyMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure onMyMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure onMyMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure CreateLabel(var Lbl: TStaticText;
X,Y,W,H: Integer;
BorderStyle: TStaticBorderStyle;
Color,FontColor: TColor;
FontStyle: TFontStyles;
Capt: String;
Align: TAlignment;
FontSize: Integer);
end;
var
mySD: Array of TMySpecialDay;
erstellen tu ich das ganze über meinen constructor und indem ich
das array mit setlength(length + 1) erhöhe.
Weiss da jemand Rat?
mfg, Mika