AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Laden von Array dauert sehr sehr lange

Ein Thema von HomerGER · begonnen am 29. Dez 2003 · letzter Beitrag vom 3. Jan 2004
 
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.421 Beiträge
 
Delphi 12 Athens
 
#14

Re: Laden von Array dauert sehr sehr lange

  Alt 30. Dez 2003, 08:31
Weitere Optimierungen, die Du überlegen solltest. Folgende Voraussetzungen:
  1. Der Wert vor dem ersten Underscore bestimmt die Position des Eintrags im Array
  2. Alle Wertenamen in der StringList werden mit einem "=" abgeschlossen.
  3. Einen Eintrag im Bereich von -1 existiert nicht

Unter diesen Voraussetzungen können wir auf die äußere Schleife (for i := 1 to k_max_xp_tweak_i d) komplett verzichten. Das gibt einen Perfomance-Gewinn im Bereich des k_max_xp_tweak_i-fachen!

Code:
for j := 0 to config_sl.Count - 1 do
begin
[color=#ff0000]{
  Als erstes holen wir uns den aktuellen String und zerlegen diesen in seine Einzelteile.
  [i]ValueName[/i] hält am Ende den Wert nach dem ersten Underscode bis vor dem "="
  [i]strIdx[/i] ist eine Helfervariable, welche den Wert vor dem ersten Underscore hält
  [i]Idx[/i] ist der Integerwert von strIdx, und speichert den gewünschten Index im Array
}[/color]
    // get current string
    Dummy := config_sl.Strings[j];
    // extract value name from current string
    ValueName := Copy(Dummy, 1, Pred(Pos('=', Dummy)));
    // extract index of value from string (first as string)
    strIdx := Copy(ValueName, 1, Pred(Pos('_', ValueName));
    // then as integer for array index
    Idx := StrToIntDef(strIdx, -1);
    if Idx = -1 then
        // invalid index, continue with next value in string list
        Continue;
    // remove index value from value name for faster string comparison
    Delete(ValueName, 1, Succ(Length(strIdx)));

    //Version auslesen
    if 'HXPTT_XPVersion' = ValueName then
        xp_version_s := Copy(Dummy, Succ(Pos('=', Dummy)), MaxInt);

    //XP Version prüfen
    if (XP_Version_Pruefen_GU(xp_version_s) = True) then
    begin
        //Daten ins Array schreiben
        //Titel
[color=#ff0000]{
  Ab hier fleißig mit ValueName arbeiten. Dadurch können auf weitere POS-Suchen,
  Stringverknüpfungen und Umwandlungen verzichtet werden ;-)
}[/color]
        if 'HXPTT_Titel' = ValueName then
            g_button_cfg_ar[Idx].titel_s := Copy(Dummy, Succ(Pos('=', Dummy)), MaxInt)

        //XPVersion
        else if 'HXPTT_XPVersion' = ValueName then
            g_button_cfg_ar[Idx].xpversion_s := Copy(Dummy, Succ(Pos('=', Dummy)), MaxInt)

        ... und so weiter und so fort ;-)
        else ....

    end;
end;
Abschließend solltest Du noch wissen, daß
Pred(Idx) = I - 1
und
Succ(Idx) = I + 1

......
Lizbeth W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:46 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