![]() |
Performance erhöhen bei einem Kalender
Hallo an alle,
ich schreibe an einem Kalender/Planer in dem man sachen eintragen kann. Weil das ganze für Firmen ist die z.B. den Urlaub ihrer Mitarbeiter damit planen wollen habe ich mich dazuentschlossen das ganze nicht als Komponente von irgendwoher zu nehmen sondern das selber zu schreiben. So habe ich mir ein Objekt erstellt (abgeleitet von TShape) mit dem ich jeden Tag als kleines Rechteck darstelle. Nun habe ich aber das Problem das das ganze schon bei 70 Leuten und einem Jahr (also 70 Zeilen, 365 Spalten) sehr langsam lädt (ich habe nach 5 minuten abgebrochen). Bei 70 Leuten und einem Monat brauch ich immer noch 10 sekunden und ich habe das Gefühl je mehr ich von den Kästchen erstelle desto länger braucht er pro Kästchen. Ich dachte mir ich packe das ganze mal in einen Thread den ich beim starten des Kalenders einfach aufrufe, meinetwegen auch mit einer höherer Priorität damit das ganze mal ein bisschen an Performance zulegt. Als zweite überlegen kam mir das ich aus dem Thread ein Array mache (dynamisches) und einfach für jede Zeile einen Thread starte der mir dann die lustigen Kästchen zeichnet. Würde es schneller gehen wenn ich den Array für die Shapes vorher bereitstelle und jedem Thread einfach sage fülle den Array von 1 - 300, 2ter Thread fülle Array von 301 bis 600 und so weiter? Hat jemand von euch schon mal was ähnlcihes gemacht? |
nochmal ich
Hier nochmal n bisschen Code von mir, vielleicht habe ich
ja auch da was falsches drinne ?!
Delphi-Quellcode:
vielleicht hilft das ja auch noch weiter.
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; TCreateIt = Record _ID: Integer; Top: Integer; Left: Integer; State: Word; _Date: TDate; col: integer; row: Integer; coords: TMyCoords; _Caption: String; _Color: TColor; Person: String; 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; constructor TMySpecialDay.NCreate ( how: TCreateIt ); Begin // Erstellen Create (f_planer.sKalender); Parent := f_planer.sKalender; INC (mySDCount); // Konfigurieren msdID := how._ID; msdState := how.State; msdInfo.msdDay := how._Date; msdInfo.msdWDay := f_planer.daytoStr(DayOfTheWeek(how._Date)); msdInfo.msdPerson := how._Caption; msdInfo.msdPersonNr := how.Person; msdCoords := how.Coords; Case msdState of msdDontUse : begin Brush.Color := mscDontUse; end; end; // Ausrichten SetBounds(how.Left, how.top, msdWidth, msdHeight); // Methoden und Ereignisse anhängen if msdState <> msdDontUse then Begin OnMouseDown := onMyMouseDown; OnMouseMove := onMyMouseMove; OnMouseUp := onMyMouseUp; msdChanged := False; msdSelected := False; End; End; destructor TMySpecialDay.Destroy; Begin Inherited Destroy; End; mfg, Mika |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz