Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Laden von Array dauert sehr sehr lange (https://www.delphipraxis.net/13945-laden-von-array-dauert-sehr-sehr-lange.html)

HomerGER 29. Dez 2003 17:51


Laden von Array dauert sehr sehr lange
 
Hallo


ich hab ein Array vom type record
im record hab ich 20strings und 10Integer
das array ist 250 lang
wenn ich jetzt alles fülle dauert es sehr sehr lange - kann ich das irgend wie beschleunigen?

i := 1 to 200 do
begin

arry[i].str1 := 'str';
arry[i].str2 := 'str';
arry[i].str3 := 'str';
usw....
end;

d3g 29. Dez 2003 18:01

Re: Laden von Array dauert sehr sehr lange
 
Benutze in deinem Record nicht normale (Huge-)Strings, sondern solche, die in der Länge begrenzt sind.
Delphi-Quellcode:
type
  TMyRecord = record
    str1: String[128]; // String mit max. 128 Zeichen
    str2: String[32]; // String mit max. 32 Zeichen
  end;
Solche Strings sind sehr viel schneller, denn die Speicheroperationen, die ausgeführt werden müssen, um ihnen etwas zuzuweisen, beschränken sich auf simples Speicherkopieren.

[edit]Schon schlimm, wenn man kein Pascal mehr kann und Semikolons (!) vergisst ... :pale:[/edit]

Niko 29. Dez 2003 18:28

Re: Laden von Array dauert sehr sehr lange
 
Zitat:

Zitat von HomerGER
wenn ich jetzt alles fülle dauert es sehr sehr lange

:shock: Was bezeichnest du als lang?

Wenn ich das ausprobiere (PII, 300 MHz) und die Zeit mit gettickcount messe komme ich auf Werte zwischen 3 und 9 ms.
Sonst kann ich mich nur d3gs Vorschlag anschließen.

HomerGER 29. Dez 2003 21:07

Re: Laden von Array dauert sehr sehr lange
 
ich vergass
es wird eine textdatei aus ne dll geladen
lange hmm so 1-2 min

sakura 29. Dez 2003 21:09

Re: Laden von Array dauert sehr sehr lange
 
Wo kommen denn die Werte her, weil mal kurz 5000 Strings zu setzen eigentlich nicht lange dauert.

...:cat:...

HomerGER 29. Dez 2003 21:16

Re: Laden von Array dauert sehr sehr lange
 
ok
ein record
Delphi-Quellcode:
Type
ButtonConfig = Record //Config Button Daten
titel_s : String;
xpversion_s : String;
menu_i : Integer;
header_i : Integer;
button_i : Integer;
datenlesen_i : Integer;
datenschreiben_i : Integer;
datenauswerten_i : Integer;
datenelemente_i : Integer;
datenstatus_i : Integer;
datenxpspeichern_i : Integer;
datenbackupspeichern_i : Integer;
datenwertspeichern_i : Integer;
datenfuellen_i : Integer;
datenfrei_i : Integer; // Soll auf Freigabe geprüft werden
datenverweis_i : Integer; //Gib es ein Verweis auf ein anderen Item
root1_s : String;
key1_s : String;
wert1_s : String;
wert2_s : String;
wert3_s : String;
wert4_s : String;
wert5_s : String;
wert6_s : String;
wert7_s : String;
wert8_s : String;
wert9_s : String;
wert10_s : String;
root2_s : String;
key2_s : String;
wert21_s : String;
wert22_s : String;
wert23_s : String;
wert24_s : String;
wert25_s : String;
root3_s : String;
key3_s : String;
wert31_s : String;
wert32_s : String;
wert33_s : String;
wert34_s : String;
wert35_s : String;
root4_s : String;
key4_s : String;
wert41_s : String;
wert42_s : String;
wert43_s : String;
wert44_s : String;
wert45_s : String;
root5_s : String;
key5_s : String;
wert51_s : String;
wert52_s : String;
wert53_s : String;
wert54_s : String;
wert55_s : String;
suchwert1_s : String; //Wenn nach etwas zusätzlichen gesucht werden mus
xp_default1_s : String;
xp_default2_s : String;
xp_default3_s : String;
homer_default1_s : String;
homer_default2_s : String;
homer_default3_s : String;
xp_soll_s : String;
homer_soll_s : String;
element1_s : String;
element2_s : String;
element3_s : String;
element4_s : String;
element5_s : String;
element6_s : String;
element7_s : String;
element8_s : String;
element9_s : String;
element10_s : String;
element11_s : String;
element12_s : String;
element_hint1_s : String;
element_hint2_s : String;
end;
das array dann

g_button_cfg_ar : Array[1..250] of ButtonConfig;


die daten werden aus einer textdatei die in einer dll ist geladen

[edit=sakura] [delphi]-Tags gesetzt. Mfg, sakura[/edit]

sakura 29. Dez 2003 21:23

Re: Laden von Array dauert sehr sehr lange
 
Eigentlich interessierte mich eher der Code, wo Du die Textdatei auseinander nimmst. Da dürfte die meiste Zeit verloren gehen ;-)

...:cat:...

P.S.: Du solltest Deine Delphi Codes in die [ delphi ] und [/ delphi ] Tags (ohne Leerzeichen) setzen

HomerGER 29. Dez 2003 21:32

Re: Laden von Array dauert sehr sehr lange
 
Code:
//******************************************************************************
//Haupt_Unit
//Confign aus Text.dll
Procedure Button_Cfg_Lesen_BCU();
var
lib_h : THandle;
res_s : TResourceStream;
config_sl : TStringList;
i : Integer;
j : Integer;
pos_i : Integer;
xp_version_s : String;
begin
    //Config Array löschen
    Config_Array_Loeschen_BCU;

    //Dll laden
    lib_h := LoadLibrary(PChar(g_sprachen_path_s + g_programm_sprache_s + '_Shell.dll'));

    config_sl := TStringList.Create;
    config_sl.Clear;

    res_s := NIL;

    if (lib_h <> 0) then
    begin
        try
            res_s := TResourceStream.Create(lib_h, 'Button_Cfg', RT_RCDATA);
            //In StringList laden
            config_sl.LoadFromStream(res_s);

            for i := 1 to k_max_xp_tweak_i do
            begin
                for j := 0 to config_sl.Count - 1 do
                begin
                    //Version auslesen
                    if (Pos(IntToStr(i) + '_HXPTT_XPVersion=', config_sl.Strings[j]) = 1) then
                    begin
                        pos_i := Pos('=', config_sl.Strings[j]);
                        xp_version_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                    end;

                    //XP Version prüfen
                    if (XP_Version_Pruefen_GU(xp_version_s) = True) then
                    begin
                        //Daten ins Array schreiben
                        //Titel
                        if (Pos(IntToStr(i) + '_HXPTT_Titel=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].titel_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;

                        //XPVersion
                        if (Pos(IntToStr(i) + '_HXPTT_XPVersion=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].xpversion_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;

                        //Menu Nr.
                        if (Pos(IntToStr(i) + '_HXPTT_Menu=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].menu_i := StrToInt(Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j])));
                        end;

                        //Header Nr.
                        if (Pos(IntToStr(i) + '_HXPTT_Header=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].header_i := StrToInt(Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j])));
                        end;

                        //Button Nr.
                        if (Pos(IntToStr(i) + '_HXPTT_Button=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].button_i := StrToInt(Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j])));
                        end;

                        //Daten Lesen Option
                        if (Pos(IntToStr(i) + '_HXPTT_Daten_Lesen=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].datenlesen_i := StrToInt(Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j])));
                        end;

                        //Daten Schreiben Option
                        if (Pos(IntToStr(i) + '_HXPTT_Daten_Schreiben=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].datenschreiben_i := StrToInt(Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j])));
                        end;

                        //Daten Auswerten Option
                        if (Pos(IntToStr(i) + '_HXPTT_Daten_Auswerten=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].datenauswerten_i := StrToInt(Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j])));
                        end;

                        //Daten Elemente Option
                        if (Pos(IntToStr(i) + '_HXPTT_Daten_Elemente=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].datenelemente_i := StrToInt(Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j])));
                        end;

                        //Daten Status Option
                        if (Pos(IntToStr(i) + '_HXPTT_Daten_Status=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].datenstatus_i := StrToInt(Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j])));
                        end;

                        //Daten XPSpeichern Option
                        if (Pos(IntToStr(i) + '_HXPTT_Daten_XPSpeichern=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].datenxpspeichern_i := StrToInt(Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j])));
                        end;

                        //Daten BackupSpeichern Option
                        if (Pos(IntToStr(i) + '_HXPTT_Daten_BackupSpeichern=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].datenbackupspeichern_i := StrToInt(Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j])));
                        end;

                        //Daten Wert Speichern Option
                        if (Pos(IntToStr(i) + '_HXPTT_Daten_WertSpeichern=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].datenwertspeichern_i := StrToInt(Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j])));
                        end;

                        //Daten Füllen Option
                        if (Pos(IntToStr(i) + '_HXPTT_Daten_Fuellen=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].datenfuellen_i := StrToInt(Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j])));
                        end;

                        //Daten auf Freigabe prüfen
                        if (Pos(IntToStr(i) + '_HXPTT_Daten_Freigabe=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].datenfrei_i := StrToInt(Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j])));
                        end;

                        //Auf anderen Daten ein Verweis
                        if (Pos(IntToStr(i) + '_Daten_Verweis=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].datenverweis_i := StrToInt(Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j])));
                        end;

                        //Key1
                        if (Pos(IntToStr(i) + '_HXPTT_Root1=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].root1_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;
                        //Path1
                        if (Pos(IntToStr(i) + '_HXPTT_Key1=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].key1_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;
                        //Wert1
                        if (Pos(IntToStr(i) + '_HXPTT_Wert1=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].wert1_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;
                        //Wert2
                        if (Pos(IntToStr(i) + '_HXPTT_Wert2=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].wert2_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;
                        //Wert3
                        if (Pos(IntToStr(i) + '_HXPTT_Wert3=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].wert3_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;
                        //Wert4
                        if (Pos(IntToStr(i) + '_HXPTT_Wert4=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].wert4_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;
                        //Wert5
                        if (Pos(IntToStr(i) + '_HXPTT_Wert5=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].wert5_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;
                        //Wert6
                        if (Pos(IntToStr(i) + '_HXPTT_Wert6=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].wert6_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;
                        //Wert7
                        if (Pos(IntToStr(i) + '_HXPTT_Wert7=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].wert7_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;
                        //Wert8
                        if (Pos(IntToStr(i) + '_HXPTT_Wert8=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].wert8_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;
                        //Wert9
                        if (Pos(IntToStr(i) + '_HXPTT_Wert9=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].wert9_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;
                        //Wert10
                        if (Pos(IntToStr(i) + '_HXPTT_Wert10=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].wert10_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;
                        //Key2
                        if (Pos(IntToStr(i) + '_HXPTT_Root2=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].root2_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;
                        //Path2
                        if (Pos(IntToStr(i) + '_HXPTT_Key2=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].key2_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;
                        //Wert21
                        if (Pos(IntToStr(i) + '_HXPTT_Wert21=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].wert21_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;
                        //Wert22
                        if (Pos(IntToStr(i) + '_HXPTT_Wert22=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].wert22_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;
                        //Wert23
                        if (Pos(IntToStr(i) + '_HXPTT_Wert23=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].wert23_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;
                        //Wert24
                        if (Pos(IntToStr(i) + '_HXPTT_Wert24=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].wert24_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;
                        //Wert25
                        if (Pos(IntToStr(i) + '_HXPTT_Wert25=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].wert25_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;
                        //Key3
                        if (Pos(IntToStr(i) + '_HXPTT_Root3=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].root3_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;
                        //Path3
                        if (Pos(IntToStr(i) + '_HXPTT_Key3=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].key3_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;
                        //Wert31
                        if (Pos(IntToStr(i) + '_HXPTT_Wert31=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].wert31_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;
                        //Wert32
                        if (Pos(IntToStr(i) + '_HXPTT_Wert32=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].wert32_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;
                        //Wert33
                        if (Pos(IntToStr(i) + '_HXPTT_Wert33=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].wert33_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;
                        //Wert34
                        if (Pos(IntToStr(i) + '_HXPTT_Wert34=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].wert34_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;
                        //Wert35
                        if (Pos(IntToStr(i) + '_HXPTT_Wert35=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].wert25_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;
                        //Key4
                        if (Pos(IntToStr(i) + '_HXPTT_Root4=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].root4_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;
                        //Path4
                        if (Pos(IntToStr(i) + '_HXPTT_Key4=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].key4_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;
                        //Wert41
                        if (Pos(IntToStr(i) + '_HXPTT_Wert41=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].wert41_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;
                        //Wert42
                        if (Pos(IntToStr(i) + '_HXPTT_Wert42=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].wert42_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;
                        //Wert43
                        if (Pos(IntToStr(i) + '_HXPTT_Wert43=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].wert43_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;
                        //Wert44
                        if (Pos(IntToStr(i) + '_HXPTT_Wert44=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].wert44_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;
                        //Wert45
                        if (Pos(IntToStr(i) + '_HXPTT_Wert45=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].wert45_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;
                        //Key5
                        if (Pos(IntToStr(i) + '_HXPTT_Root5=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].root5_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;
                        //Path5
                        if (Pos(IntToStr(i) + '_HXPTT_Key5=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].key5_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;
                        //Wert51
                        if (Pos(IntToStr(i) + '_HXPTT_Wert51=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].wert51_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;
                        //Wert52
                        if (Pos(IntToStr(i) + '_HXPTT_Wert52=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].wert52_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;
                        //Wert53
                        if (Pos(IntToStr(i) + '_HXPTT_Wert53=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].wert53_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;
                        //Wert54
                        if (Pos(IntToStr(i) + '_HXPTT_Wert54=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].wert54_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;
                        //Wert55
                        if (Pos(IntToStr(i) + '_HXPTT_Wert55=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].wert55_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;

                        //Zusätzlicher Suchwert 1
                        if (Pos(IntToStr(i) + '_HXPTT_SuchWert1=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].suchwert1_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;

                        //XP Default1 Werte
                        if (Pos(IntToStr(i) + '_HXPTT_XP_Default1=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].xp_default1_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;

                        //XP Default2 Werte
                        if (Pos(IntToStr(i) + '_HXPTT_XP_Default2=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].xp_default2_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;

                        //XP Default3 Werte
                        if (Pos(IntToStr(i) + '_HXPTT_XP_Default3=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].xp_default3_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;

                        //Homer Default1 Werte
                        if (Pos(IntToStr(i) + '_HXPTT_Homer_Default1=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].homer_default1_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;

                         //Homer Default2 Werte
                        if (Pos(IntToStr(i) + '_HXPTT_Homer_Default2=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].homer_default2_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;

                         //Homer Default3 Werte
                        if (Pos(IntToStr(i) + '_HXPTT_Homer_Default3=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].homer_default3_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;

                        //XP Soll Wert
                        if (Pos(IntToStr(i) + '_HXPTT_XP_Soll=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].xp_soll_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;

                        //Homer Soll Wert
                        if (Pos(IntToStr(i) + '_HXPTT_Homer_Soll=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].homer_soll_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;

                        //Element 1
                        if (Pos(IntToStr(i) + '_HXPTT_Element1=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].element1_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;

                        //Element 2
                        if (Pos(IntToStr(i) + '_HXPTT_Element2=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].element2_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;

                        //Element 3
                        if (Pos(IntToStr(i) + '_HXPTT_Element3=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].element3_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;

                        //Element 4
                        if (Pos(IntToStr(i) + '_HXPTT_Element4=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].element4_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;

                        //Element 5
                        if (Pos(IntToStr(i) + '_HXPTT_Element5=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].element5_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;

                        //Element 6
                        if (Pos(IntToStr(i) + '_HXPTT_Element6=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].element6_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;

                        //Element 7
                        if (Pos(IntToStr(i) + '_HXPTT_Element7=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].element7_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;

                        //Element 8
                        if (Pos(IntToStr(i) + '_HXPTT_Element8=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].element8_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;

                        //Element 9
                        if (Pos(IntToStr(i) + '_HXPTT_Element9=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].element9_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;

                        //Element 10
                        if (Pos(IntToStr(i) + '_HXPTT_Element10=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].element10_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;

                        //Element 11
                        if (Pos(IntToStr(i) + '_HXPTT_Element11=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].element11_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;

                        //Element 12
                        if (Pos(IntToStr(i) + '_HXPTT_Element12=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].element12_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;

                        //Element Hint 1
                        if (Pos(IntToStr(i) + '_HXPTT_Element_Hint1=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].element_hint1_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;

                        //Element Hint2
                        if (Pos(IntToStr(i) + '_HXPTT_Element_Hint2=', config_sl.Strings[j]) = 1) then
                        begin
                            pos_i := Pos('=', config_sl.Strings[j]);
                            g_button_cfg_ar[i].element_hint2_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
                        end;
                    end;
                end;
                //ProgressBar
                ProgressBar_Starten_GU('I8', 'I9', 'PB_Config', 0, k_max_xp_tweak_i, i);
            end;
        finally
            config_sl.Free;
            res_s.Free;
        end;
    end;
    //Dll freigeben
    FreeLibrary(lib_h);
end;

ps ich weiß ich hätte auch eine datenbank nehmen können
wollte ich aber nicht

sakura 29. Dez 2003 21:38

Re: Laden von Array dauert sehr sehr lange
 
Erste enorme Verbesserung sollte es sein, wenn Du config_sl.Strings[j] in eine "Dummy Variable" lädst und anschließend mit der arbeitest. Wie lange dauert es dann noch?

...:cat:...

HomerGER 29. Dez 2003 21:43

Re: Laden von Array dauert sehr sehr lange
 
versteh ich nicht
ich muss doch in der stringlist nach meinem str suchen

sakura 29. Dez 2003 23:04

Re: Laden von Array dauert sehr sehr lange
 
Also wie folgend: (Hier auch gleich mal IntToStr(I) ersetzt ;-)
Code:
                for j := 0 to config_sl.Count - 1 do
                begin
                    [color=#ff0000]Dummy := config_sl.Strings[j];[/color]
                    [color=#2400ff]strI := IntToStr(i);[/color]
                    //Version auslesen
                    if (Pos([color=#2400ff]strI[/color] + '_HXPTT_XPVersion=', [color=#ff0000]Dummy[/color]) = 1) then
                    begin
                        pos_i := Pos('=', [color=#ff0000]Dummy[/color]);
                        xp_version_s := Copy([color=#ff0000]Dummy[/color], pos_i + 1, Length([color=#ff0000]Dummy[/color]));
                    end;

                    ... von hier an [color=#ff0000]Dummy[/color] ind [color=#2400ff]strI[/color] nutzen ;-)
...:cat:...

HomerGER 30. Dez 2003 00:38

Re: Laden von Array dauert sehr sehr lange
 
achso meinst du das
hmm
das bringt was ?
werde es propieren

HomerGER 30. Dez 2003 00:57

Re: Laden von Array dauert sehr sehr lange
 
hat schon einiges gebraucht
thx
ist zwar immer noch langsam aber viel besser als zum anfang - viel besser
werde noch den tip d3g propieren

sakura 30. Dez 2003 08:31

Re: Laden von Array dauert sehr sehr lange
 
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

...:cat:...

sakura 30. Dez 2003 16:57

Re: Laden von Array dauert sehr sehr lange
 
Und, wie sieht es jetzt aus :stupid:

...:cat:...

HomerGER 2. Jan 2004 18:42

Re: Laden von Array dauert sehr sehr lange
 
@sakura

ähhhhh
ich bin jetzt ein bischen ungläubig
hatte vor der änderung ca. 15:547 s
und jetzt
trau ich mich garnicht zu sagen

ca 00:031 !!!!!!!!!!!!!!!!

wie ist denn möglich

ich hab mit so ca. 5 - 7 s gerechnet



erkläre mal bitte

sakura 2. Jan 2004 18:56

Re: Laden von Array dauert sehr sehr lange
 
Zitat:

Zitat von HomerGER
wie ist denn möglich [...] erkläre mal bitte

Gerne.

Die erste und wohl größte Verbesserung ist es gewesen, die Schleife for I := 0 to k_max_xp_tweak_i zu entfernen. Dadurch sparst Du Dir "k_max_xp_tweak_i" Läufe durch die gesamte StringListe config_sl ein. Das ist schon mal ein direkter Performancegewinn, der einlauchten sollte.

Der nächste wichtige Punkt war es die String-Operationen zu optimieren. Delphi hat zwar mit die besten Stringroutinen, die es gibt, aber man kann es immer etwas beeinflussen. So zum Beispiel folgende Deiner Punkte
  • Mehrfach nutzt Du ein Konstrukt folgender Art if Pos(IntToStr(i) + '_HXPTT_Titel=', config_sl.Strings[j]) = 1 then...
    Dieses Konstrukt hat mehrere Nachteile.
    1. IntToStr(i) wird jedes mal ausgeführt
    2. Anschließend + '_HXPTT_Titel=' verbindest Du jedes Mal zwei Strings. Das ist generell recht langsam
    3. Dann kommt jedes Mal Pos. Dieses ist recht schnell, wenn ein Match gefunden wird, wird es jedoch nicht gefunden, muss jedes Mal der gesamte (dynamische) String umsonst durchsucht werden
    4. anschließend der Vergleich = 1, nachdem bereits der Stringvergleich stattfand. Der ist nicht mehr tragisch, aber trägt zur Zeitrechnung hinzu ;-)
  • Weiter geht es mit
    pos_i := Pos('=', config_sl.Strings[j]);
    xp_version_s := Copy(config_sl.Strings[j], pos_i + 1, Length(config_sl.Strings[j]));
    1. Wieder suchst Du im String... Das dauert natürlich eine Weile.
    2. Im Copy übergibst Du als letztes die Länge des Strings, was als solches schon unlogisch ist, da Du Länge - Position des "=" kopieren willst. Weiter kommt, das Copy intern eh die maximale Anzahl der zu kopierenden Zeichen ermittelt, damit kannst Du gleich MaxInt übergeben, da alles bis zum Schluss kopiert werden soll.
  • Die restlichen Optimierungen kommen durch die Aufbereitung der Variablen am Anfang und den Zugriff auf die fertigen Variablenwerte anstatt diese in jedem if neu zu ermitteln

Ich hoffe, daß das einen kleinen Einblick in die Optimierungslogik gibt. Man könnte noch eine Menge rausholen, aber ich glaube die aktuellen Werte sind gut genug, daß weiterer Aufwand hier nicht lohnen würde ;-)

...:cat:...

sakura 2. Jan 2004 19:00

Re: Laden von Array dauert sehr sehr lange
 
Von
Zitat:

Zitat von HomerGER
hmm so 1-2 min

nach
Zitat:

Zitat von HomerGER
15:547 s

auf
Zitat:

Zitat von HomerGER
00:031 s

:firejump: (Das musste noch raus :mrgreen: )

...:cat:...

HomerGER 2. Jan 2004 20:58

Re: Laden von Array dauert sehr sehr lange
 
tiefen dank

das mit den stringoperation war schon klar
das dort immer eine funktion aufgerufen wird

nur muss ich zugeben ich wußte nicht wie ich es anders hinbekommen sollte

noch mal neige ich mein haupt und bin dir und den anderen zum tiefen dank verpflichtet

sakura 2. Jan 2004 20:59

Re: Laden von Array dauert sehr sehr lange
 
:oops: Nicht gleich so dick auftragen, daß hat bei mir Nebenwirkungen :mrgreen:

Danke!

...:cat:...

HomerGER 3. Jan 2004 06:43

Re: Laden von Array dauert sehr sehr lange
 
doch doch
von 2 min zu millisek
und dann bei dieser sehr ausführlichen hilfe
da kann man ruhig dick auftragen :hello:


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:18 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz