Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi FOR oder WIHLE was ist schneller (Stringgrid befüllen) (https://www.delphipraxis.net/129241-oder-wihle-ist-schneller-stringgrid-befuellen.html)

thkerkmann 15. Feb 2009 15:18

Re: FOR oder WIHLE was ist schneller (Stringgrid befüllen)
 
Hi,

also wenn Du schon beim Optimieren bist:

Delphi-Quellcode:
   if pos('F',SchichtList.Strings[x])>0 then result:='F';//'Frühschicht';
   if pos('S',SchichtList.Strings[x])>0 then result:='S';//'Spätschicht';
   if pos('N',SchichtList.Strings[x])>0 then result:='N';//'Nachtschicht';
   if pos('W',SchichtList.Strings[x])>0 then result:='.';//'Wochenende';
Hier wird 4 x ein String aus der Liste geholt um einen Vergleich durchzuführen.
Wenn aber einer der Vergleiche ok geht, wird auch noch weiter verglichen.

Also besser
Delphi-Quellcode:
  schList := SchichtList.Strings[x];
  if pos('F',schList)>0 then
    result:='F'  //'Frühschicht'
  else if pos('S',schList)>0 then
    result:='S' //'Spätschicht'
  else if pos('N',schList)>0 then
    result:='N'  //'Nachtschicht'
  else if pos('W',SchichtList.Strings[x])>0 then
    result:='.'; //'Wochenende'
Wenn es gewünscht ist, dass z.B Wochenende den Vorrang hat (theoretisch könnten ja alle Buchstaben in schList auftauchen,
dann musst du einfach die Reihnenfolge der Prüfungen entsprechend dem Vorrang tauschen.

Gruss

himitsu 15. Feb 2009 15:22

Re: FOR oder WIHLE was ist schneller (Stringgrid befüllen)
 
Und was ist eigentlich, wenn mal weder F, S, N oder W in SchichtList.Strings[x] vorkommt?

HaJo 15. Feb 2009 16:10

Re: FOR oder WIHLE was ist schneller (Stringgrid befüllen)
 
Tja, was ich hier lese riecht für mich eher nach einer klassischen Datenbank-Aufgabe, statt das ganze im Memory abzuarbeiten.

Chemiker 15. Feb 2009 16:26

Re: FOR oder WIHLE was ist schneller (Stringgrid befüllen)
 
Hallo Stef_One,

Delphi-Quellcode:
Daten : Array [1..100000] of TChangeData;
mit dieser Zeile wird natürlich sehr viel Speicher belegt und das kann dann dazu führen das Windows anfängt den Speicher auf der Festplatte auszulagern.
Ich würde diesen Wert mal auf 1.000 setzen um zu sehen, ob die Geschwindigkeit der Schleife zunimmt, oder besser einen dynamischen Array dafür verwenden, um nur so viel Speicher zu Verbrauchen wie er auch benötigt wird.

Bis bald Chemiker

mkinzler 15. Feb 2009 16:36

Re: FOR oder WIHLE was ist schneller (Stringgrid befüllen)
 
Wenn schon per array dann einen dynamischen. Besser aber eine Liste oder eine Datenbank-Lösung

HaJo 15. Feb 2009 17:01

Re: FOR oder WIHLE was ist schneller (Stringgrid befüllen)
 
@mkinzler, Danke für den Hinweis zur Datenbank-Lösung!

Gerade das hier spricht dafür:
Zitat:

im Testmodus sind 45 Mitarbeiter eingepflegt
Wieviele werden es wohl am Ende sein??
Ich stelle es mir schrecklich vor, Mitarbeiterdaten im Quelltext einzupflegen :-)

Stef_One 19. Feb 2009 17:56

Re: FOR oder WIHLE was ist schneller (Stringgrid befüllen)
 
@mkinzler
Zitat:

Gerade das hier spricht dafür:
Zitat:
im Testmodus sind 45 Mitarbeiter eingepflegt

Wieviele werden es wohl am Ende sein??
Ich stelle es mir schrecklich vor, Mitarbeiterdaten im Quelltext einzupflegen Smile
also das ganze ist so aufgebaut das man die Mitarbeiter über ein Excelfile importieren kann! Wenns hoch kommt könnte das auf ganze ca.600 ansteigen!



Zitat:

mit dieser Zeile wird natürlich sehr viel Speicher belegt und das kann dann dazu führen das Windows anfängt den Speicher auf der Festplatte auszulagern.
Ich würde diesen Wert mal auf 1.000 setzen um zu sehen, ob die Geschwindigkeit der Schleife zunimmt, oder besser einen dynamischen Array dafür verwenden, um nur so viel Speicher zu Verbrauchen wie er auch benötigt wird.
@chemiker
mit diesen Datensätzen übersteuere ich die berechneten Schichten (z.b mit Urlaub/Krank/Schichten die nicht der normalen Reihenfolge entsprechen) für eine 4-5 Wochenplanung komme ich jetzt bei 45 Mitarbeitern schon auf ca. 900 einträge! Dieses Array zuverkleinern würde mir nichts bringen.

Delphi-Quellcode:
Daten : Array [1..100000] of TChangeData;

@himitsu
Zitat:

Und was ist eigentlich, wenn mal weder F, S, N oder W in SchichtList.Strings[x] vorkommt?
SchichtList gibt nur die normale Reihenfolge wieder, sollte es die Schicht von diesem System abweichen wird sie durch TChangeData
übersteuert.

mquadrat 19. Feb 2009 18:07

Re: FOR oder WIHLE was ist schneller (Stringgrid befüllen)
 
Bei 600 Personen wären das 12.000 Records?! Hoffentlich suchst du dadrin nie einen bestimmten, das würde ja ewig dauern. Dazu dann noch die normale Schichtplanung.

Also da würd ich immer über ne Datenbank gehen. Wie speicherst du die Daten denn momentan eigentlich?

Chemiker 19. Feb 2009 18:58

Re: FOR oder WIHLE was ist schneller (Stringgrid befüllen)
 
Hallo Stef_one,

Zitat:

Zitat von Stef_one
mit diesen Datensätzen übersteuere ich die berechneten Schichten (z.b mit Urlaub/Krank/Schichten die nicht der normalen Reihenfolge entsprechen) für eine 4-5 Wochenplanung komme ich jetzt bei 45 Mitarbeitern schon auf ca. 900 einträge! Dieses Array zuverkleinern würde mir nichts bringen.

Das kann schon sein, aber ich wollte damit nur schreiben, dass man mit einer Verbesserung der Schleife in Bezug auf Geschwindigkeit das Grundlegende Problem nicht erfasst.

Um das ganze zu vereinfachen, eine Optimierung der Schleife bringt nichts, weil Dein Ansatz grundlegend Falsch ist.

Das Mittel der Wahl ist eine Datenbank.

Bis bald Chemiker

Stef_One 19. Feb 2009 19:28

Re: FOR oder WIHLE was ist schneller (Stringgrid befüllen)
 
@mquadrat

momentan speicher ich das so:


Delphi-Quellcode:
procedure SaveMitarbeiter;//SaveFileRec;
var
  F: File of TMitarbeiter;
begin
  try
    AssignFile(F,extractfilepath(application.exename)+'\data\Mitarbeiter.dat');
    ReWrite(F);
    Write(F,Mitarbeiter);
  finally
    CloseFile(F);
  end;
end;

@Chemiker
Hmm ja Dantenbank damit habe ich mich noch nicht beschäftig, allerdings hatte ich schon nachgedacht über access zu gehn,
würd aber gern bei delphi bleiben, gibs dahin gehend eine Komponente die du mir empfehlen kannst?


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:38 Uhr.
Seite 2 von 3     12 3      

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