![]() |
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; |
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:
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.
type
TMyRecord = record str1: String[128]; // String mit max. 128 Zeichen str2: String[32]; // String mit max. 32 Zeichen end; [edit]Schon schlimm, wenn man kein Pascal mehr kann und Semikolons (!) vergisst ... :pale:[/edit] |
Re: Laden von Array dauert sehr sehr lange
Zitat:
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. |
Re: Laden von Array dauert sehr sehr lange
ich vergass
es wird eine textdatei aus ne dll geladen lange hmm so 1-2 min |
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:... |
Re: Laden von Array dauert sehr sehr lange
ok
ein record
Delphi-Quellcode:
das array dann
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; 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] |
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 |
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 |
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:... |
Re: Laden von Array dauert sehr sehr lange
versteh ich nicht
ich muss doch in der stringlist nach meinem str suchen |
Re: Laden von Array dauert sehr sehr lange
Also wie folgend: (Hier auch gleich mal IntToStr(I) ersetzt ;-)
Code:
...:cat:...
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 ;-) |
Re: Laden von Array dauert sehr sehr lange
achso meinst du das
hmm das bringt was ? werde es propieren |
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 |
Re: Laden von Array dauert sehr sehr lange
Weitere Optimierungen, die Du überlegen solltest. Folgende Voraussetzungen:
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:
Abschließend solltest Du noch wissen, daß
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; Pred(Idx) = I - 1 und Succ(Idx) = I + 1 ...:cat:... |
Re: Laden von Array dauert sehr sehr lange
Und, wie sieht es jetzt aus :stupid:
...:cat:... |
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 |
Re: Laden von Array dauert sehr sehr lange
Zitat:
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
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:... |
Re: Laden von Array dauert sehr sehr lange
Von
Zitat:
Zitat:
Zitat:
...:cat:... |
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 |
Re: Laden von Array dauert sehr sehr lange
:oops: Nicht gleich so dick auftragen, daß hat bei mir Nebenwirkungen :mrgreen:
Danke! ...:cat:... |
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 13:01 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