Witam,
Mam dziwny problem po zrobieniu upgrade 3 program skompilowany spowolnił 100 krotnie. Nie chce mi się wierzyć ale puściłem starą wersję i wykonuje się w ciągu kilkadziesiąt sekund a ta nowa ponad 40 minuty.
To jakiś bug Embarcadero!
Co robi ta część programu? pętlą sobie chodzę po wierszach i komórkach TStringGrid i pobieram z nich wcześniej przetworzone dane - to proste rozwiązanie.
Jest tego sporo to ponad 50k ale jak wspomniałem dla starej wersji bez upgradu nie było problemu a teraz jest.
Jeszcze wspomne ze nie robiłem upgrade 2 tylko od razu 3 więc nie wiem jak byłoby dla 2.
for I := 2 to oForm1.Grid1.RowCount - 1 do
begin
komponent:=oForm1.Grid1.Cells[0,i];
klient:= oForm1.Grid1.Cells[5,i];
// i po kolumnach...
Droga Redakcjo, co robić? jak żyć?
procedura działa tak, że pobiera z wierszy komponent,klient, a data i qty z kolumn /wewnętrzna pętla/ i następnie wykonuje procedure zapisu sp na ms sql dbo.R0387
to nie problem sp sql, zakomentowałem uruchomienie R0387.ExecProc i czas pracy omawianego fragmentu kodu sie prawie nie zmienił.
Wg mnie wydłużył się i to bardzo bardzo czas pobierania z Cells[x,y]
co o tym sądzicie? to działało przez wiele lat i po tym upgradzie problem!
Grid1.Visible:=false;
oForm1.visible:=false;
//
for I := 2 to oForm1.Grid1.RowCount - 1 do
begin
komponent:=oForm1.Grid1.Cells[0,i];
klient:= oForm1.Grid1.Cells[5,i];
R0387.Parameters.ParamByName('@komponent').Value:=komponent;
R0387.Parameters.ParamByName('@klient').Value:=klient;
//
plan:=0;
wyciete:=0;
//
try
plan:=StrToInt(StringReplace(oForm1.Grid1.Cells[9,i],'.','',[rfReplaceAll])); //plan
except
end;
//
try
wyciete:=StrToInt(StringReplace(oForm1.Grid1.Cells[10,i],'.','',[rfReplaceAll])); //wyciete
except
end;
//
qdel:=0;
try
qdel:=StrToInt(StringReplace(oForm1.Grid1.Cells[6,i],'.','',[rfReplaceAll])); //qdel
except
end;
//
for j := 0 to 15+50 do //bylo 52
begin
data:= Days[j];
try
str:=StringReplace(oForm1.Grid1.Cells[11+j,i],'.','',[rfReplaceAll]);
str:=StringReplace(str,'-','',[rfReplaceAll]);
qty:=StrToInt(str);
except
qty:=0;
end;
if (qty<>0) then
begin
week:=WeekOfTheYear(data);
DecodeDate(data, dataYear, dataMonth, dataDay);
R0387.Parameters.ParamByName('@data').Value:=DateToStr(data);
R0387.Parameters.ParamByName('@zamowienie').Value:=qty;
R0387.Parameters.ParamByName('@week').Value:=week;
R0387.Parameters.ParamByName('@Produkcja').Value:=null;
R0387.Parameters.ParamByName('@qdel').Value:=qdel;
qdel:=0;
if (Now+360>data) then
begin
R0387.ExecProc;
kod:= R0387.Parameters.ParamByName('@RETURN_VALUE').value;
end;
end;
//
end;
//
end;
//
Caption:='R0387 zapisane do tablicy OrdersKomponenty!!!!';
//