Einzelnen Beitrag anzeigen

Benutzerbild von mika
mika

Registriert seit: 25. Okt 2002
176 Beiträge
 
Delphi 6 Professional
 
#1

Speicher sparen und Geschwindigeit erhöhen

  Alt 14. Feb 2003, 11:38
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
:: don't Panic ::
  Mit Zitat antworten Zitat