Weitere Optimierungen, die Du überlegen solltest. Folgende Voraussetzungen:
- Der Wert vor dem ersten Underscore bestimmt die Position des Eintrags im Array
- Alle Wertenamen in der StringList werden mit einem "=" abgeschlossen.
- 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
...
...