Comment optimer le temps d'execution d'une application
azubi
Messages postés5Date d'inscriptionmercredi 20 décembre 2006StatutMembreDernière intervention17 juin 2008
-
16 juin 2008 à 15:23
Utilisateur anonyme -
17 juin 2008 à 13:30
Salut tout le monde
J'ai fait une fonction mais le temps d'execution dure a peu pres 45 minute je pense que ce n'ai pas normal
le code est ci-dessous:
procedure TFrmStoredProc.TestParameterDeSortieEtEntreePourProc(ColIndx:Integer;SL,ProcEntSort_SL:TStringList);
var
tt,t,m,n,i,j,k,P,l:integer;
TSS,Ms,sr,ss,ts,sp,s,ProcStr,TeilProcStr,sn,sk,TP,Istr,Lstr:string;
perCent:Extended ;
SLL:TStringlist;
begin
ProcEingAusg_SL.sorted:=false;
SortierenStringList(ProcEntSort_SL,ColIndx); //Tri de la stringList
for i:=0 to ProcEntSort_SL.Count-1 do begin
sn:=getelement(ProcEntSort_SL[i],ColIndx,#18); //Getelement :prendre un element d'un String separe par #18
ProcStr:= getelement(ProcEntSort_SL[i],0,#18);
for l:=0 to ProcEntSort_SL.Count-1 do begin
LStr:= getelement(ProcEntSort_SL[l],0,#18);
sk:=getelement(ProcEntSort_SL[l],ColIndx,#18);
k:=0;
ts:='';
for j:=0 to wordcount5a(sn,#20) do begin
s:=getelement(getelement(sn,j,#20),0,' ');
if ProcStr<> LStr then begin
for p:=0 to wordcount5a(sk,#20)-1 do begin
sp:=getelement(getelement(sk,p,#20),0,' ');
if (uppercase(s)=uppercase(sp)) then begin
k:=k+1;
ts:=ts+#8+sp;
break;
end;
end;
end;
end;
if k<>0 then begin
percent:=(k/wordcount5a(sk,#20))*100;
SL.Add(procSTr+#20+inttostr(wordcount(sn,#20))+#20+floattostr(percent)+#20+IntToStr(k)+#20+IntToStr(wordcount(sk,#20))+#20+ LStr+#20+ts);
end;
end;
end;
end;
je ne sais pas comment faire pour reduire le temps d'execution car il est trop lent 45 min
A voir également:
Comment optimer le temps d'execution d'une application
Ben dis donc t'es pressé toi ? . Peut etre laisser les gens le temps de répondre.
Je doute que tu es fais ce code et que tu l'es testé car il est bourré de betises.
Déjà ton TStringList, il n'est ni créé, ni utiliser, ni détruit.
SL.Add : ca doit pas compiler car ta stringlist est SLL
Qu'est ce que c'est que toutes ses variables :
var
tt,t,m,n,i,j,k,P,l:integer;
TSS,Ms,sr,ss,ts,sp,s,ProcStr,TeilProcStr,sn,sk,TP,Istr,Lstr:string;
perCent:Extended ;
SLL:TStringlist;
Fais déjà le néttoyage de printemps
C'est quoi ce doublon ? for i:=0 to ProcEntSort_SL.Count-1 do
L'initialisation des variables (voir en dessous) a faire avant les boucles : je ne vois pas l'intéret de les réinitialiser 50 000 fois
k:=0;
ts:='';
Tes noms de variables devraient etre changées car là ca fait un peu cafaouillit Chtite Biloute
Bon je file : change tout ca et si ca va pas mieux redemande sans exiger et tu auras des réponses plus précises (Moi pas le temps désolé)
azubi
Messages postés5Date d'inscriptionmercredi 20 décembre 2006StatutMembreDernière intervention17 juin 2008 16 juin 2008 à 16:22
Merci mais cette fonction ca marche mais trop lent et en plus cette function n'ai pas tout le programme c just une partie de prog et j'ai cree la stringlist en formcreate:
j'explique plus profondement cette fonction :
-- j'ai un fichier text qui est enregistre par ligne comme ceci :
Nom de la storedProcedure|| parameter de sortie1| parameter de sortie 2........etc
et cette fonction fait:
1- triage de ce fichier
2- compare pour chaque procedure ses parameter de sortie avec les autres parameter de sortie des autre Proc
3- Si le parametre de sortie sont les meme avec l'autre procdure on enregistre dans ce fichier:
le nom de la procedure || le nombre de parametre de sortie ||le pourcentage (Nbdeparametre egaux/Nb Total deparametre de l'autre proc)||Nbdeparametre egaux || Nb Total deparametre de l'autre Proc||Nom de l'autre proc|| tous le parametre de sorti de l'autre proc separe par autre separateur(#20)
j'espere le pb est claire
et merci de votre aide
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 16 juin 2008 à 23:25
comment veux tu qu'on optimise ça, tu nous dis pas a quoi ça sert et il manque la plupart des fonctions (dois-je dire "de merde") qui vienne s'incruster dans ta routine...
l'optimisation d'une appli ne passe pas par l'optimisation d'une seule fonction, mais de tout l'ensemble du code du programme.
<hr size="2" width="100%" />
Vous n’avez pas trouvé la réponse que vous recherchez ?
azubi
Messages postés5Date d'inscriptionmercredi 20 décembre 2006StatutMembreDernière intervention17 juin 2008 17 juin 2008 à 09:30
salut tout le mon je sais qu 'il ya des probleme c pour ce la j'ai demander votre aide
ok
fonction tri de stringlist c celle la:
procedure TFrmStoredProc.TriStringList(SL: TstringList;ColIndx:Integer);
var
i,f : Integer;
S : string;
begin
s:= '';
for i:=0 to SL.Count-1 do begin
f:= Maxindex(SL,i,ColIndx);
if f > -1 then begin
S:= SL[i];
SL[i]:= SL[f];
SL[f]:= S;
end;
end;
end;
function TFrmStoredProc.MaxIndex(SL: Tstringlist; aStartwith,ColIndx:integer): Integer;
var
i :integer;
S,S1 :string;
begin
Result:= -1;
S:='';
for i:= aStartwith to SL.Count - 1 do begin
if ((wordcoun(getelement(Sl[i],ColIndx,#18),#20)-1)>=(wordcount(getelement(s,ColIndx,#18),#20)-1))then begin
S := Uppercase(Sl[i]);
Result := i;
end;
end;
end;
Fonction GetElement + Wordcount:
FUNCTION GetElement(S: String; Element: Integer; ElementSeparator: String = ';'): String;
//Exemple : MyElement[1]:=GetElement('Jutta;Jenny;Anke',1,';'); //--Result:='Jenny';
var
i,StartPos,EndPos: Integer;
begin
StartPos:=0;
EndPos :=0;
for i:=0 to Element do begin
if i<>0 then StartPos:=EndPos else StartPos:=0;
EndPos:=Instr(StartPos+1,S,ElementSeparator);
if EndPos=0 then EndPos:=Length(S)+1;
end;
Result:=Copy(S,StartPos+1,EndPos-StartPos-1);
end;
FUNCTION WordCount(const S: string; const WordDelims: Char): integer;
//Exemple : WordCount5A('1|2||4', '|') -> 4
var
SLen, i: Cardinal;
begin
Result:=1;
i :=1;
SLen := Length(S);
while i <= SLen do begin
if (S[i] = WordDelims) then Inc(Result);
Inc(i);
end;
end;
Et la function principale c:
procedure TFrmStoredProc.TestParameterDeSortieEtEntreePourProc(ColIndx:Integer;SL,ProcEntSort_SL:TStringList);
var
tt,t,m,n,i,j,k,P,l:integer;
TSS,Ms,sr,ss,ts,sp,s,ProcStr,TeilProcStr,sn,sk,TP,Istr,Lstr:string;
perCent:Extended ;
SLL:TStringlist;
begin
ProcEingAusg_SL.loadfromfile('Entsortpara.txt')
ProcEingAusg_SL.sorted: =false;
SortierenStringList(ProcEntSort_SL,ColIndx); //Tri de la stringList
for i:=0 to ProcEntSort_SL.Count-1 do begin
sn:=getelement(ProcEntSort_SL[i],ColIndx,#18); //Getelement :prendre un element d'un String separe par #18
ProcStr:= getelement(ProcEntSort_SL[i],0,#18);
for l:=0 to ProcEntSort_SL.Count-1 do begin
LStr:= getelement(ProcEntSort_SL[l],0,#18);
sk:=getelement(ProcEntSort_SL[l],ColIndx,#18);
k:=0;
ts:='';
for j:=0 to wordcount5a(sn,#20) do begin
s:=getelement(getelement(sn,j,#20),0,' ');
if ProcStr<> LStr then begin
for p:=0 to wordcount5a(sk,#20)-1 do begin
sp:=getelement(getelement(sk,p,#20),0,' ');
if (uppercase(s)=uppercase(sp)) then begin
k:=k+1;
ts:=ts+#8+sp;
break;
end;
end;
end;
end;
if k<>0 then begin
percent:=(k/wordcount5a(sk,#20))*100;
procedure TFrmStoredProc.TestParameterDeSortieEtEntreePourProc(ColIndx:Integer;SL,ProcEntSort_SL:TStringList);
var
tt,t,m,n,i,j,k,P,l:integer;
TSS,Ms,sr,ss,ts,sp,s,ProcStr,TeilProcStr,sn,sk,TP,Istr,Lstr:string;
perCent:Extended ;
SLL:TStringlist;
Sll est une déclarée en locale : je me demande bien comment tu l'as crée dans ton OnCreate .
Déjà arrette de faire des tonnes de boucles pour rien : tu as au moins 7 boucles pour une simple recherche. Cherches pas plus loin de la raison de la lenteur : Vu le bouzin ca donne pas envie de développer les choses : limite les boucles, crée et libere ta StringList, et arrette d'initialiser a chaque boucle tes variables locales. Déjà ca devrait aller beaucoup mieux