Witam.
Mam pewien problem otóż chciałbym zoptymalizować zużycie pamięci przez program ale w danym momencie.
Załóżmy, że pobieram z bazy PostgreSQL dane jest ich raptem 800 pozycji. dalej wczytuję to do stringgrida i na komputerze który ma zainstalowane 256Mb pamięci zaczyna zapisywać dane do PAGEFILE (wczytanie 800 pozycji zajmuję mu jakieś 40s) Czy da się ten czas skróci?
Komputer to staruszek 400Mhz i 256MB RAM ale program ten musi na nim działać raczej nie wchodzi w rachubę wymiana sprzętu. a Może StringGrida wymienić na coś mniej pamięciożernego.
procedure WczytajKontrahentow(SGrid : TStringGrid);
var
aRow : LongWord;
zapytanie : String;
begin
UstawSG(SGrid);
NadajNazwyKolumn_DlaKontrahentow(SGrid, 6);
if get_UstawBaze then set_baza := iKomisMag1.UstawBaze(InfoDB.db_rksystem +InfoDB.rok) else set_baza := True;
if set_baza then
begin
try
zapytanie := 'SELECT * FROM '+schema_kartoteki+'.'+table_kontrahenci+' '+
'ORDER BY nr_klienta ASC;';
DB_AdoDataSetZapytanie(zapytanie);
DB_AdoDataSet.Active := True;
DB_AdoDataSet.First;
if DB_AdoDataSet.RecordCount > 0 then
begin
SGrid.RowCount := DB_AdoDataSet.RecordCount +1;
for aRow := 1 to DB_AdoDataSet.RecordCount do
begin
SGrid.Cells[0, aRow] := IntToStr(aRow);
SGrid.Cells[1, aRow] := DB_AdoDataSet.FieldByName('id').AsString;
SGrid.Cells[2, aRow] := DB_AdoDataSet.FieldByName('nr_klienta').AsString;
SGrid.Cells[3, aRow] := DB_AdoDataSet.FieldByName('imie').AsString +' ' +DB_AdoDataSet.FieldByName('nazwisko').AsString;
if DB_AdoDataSet.FieldByName('nr_lokalu').AsString <> '' then
begin
SGrid.Cells[4, aRow] := DB_AdoDataSet.FieldByName('ulica').AsString +' ' +DB_AdoDataSet.FieldByName('nr_domu').AsString +' m ' +DB_AdoDataSet.FieldByName('nr_lokalu').AsString;
end else SGrid.Cells[4, aRow] := DB_AdoDataSet.FieldByName('ulica').AsString +' ' +DB_AdoDataSet.FieldByName('nr_domu').AsString;
SGrid.Cells[5, aRow] := Trim(DB_AdoDataSet.FieldByName('kod_pocztowy').AsString +' ' +DB_AdoDataSet.FieldByName('miejscowosc').AsString);
SGrid.Cells[6, aRow] := DB_AdoDataSet.FieldByName('dowod_os').AsString;
DB_AdoDataSet.Next;
end;
end;
finally
DB_AdoDataSet.Active := False;
AutoSizeGrid(SGrid);
SGrid.ColWidths[1] := -1;
SGrid.Repaint;
end;
end;
end;