ADO i rosnąca pamięć

0

Użyłem ADOConection i ADOQuery.
Za pomocą ADOQuery wysyłam zapytania.
Zauważyłem, że pamięć zajmowana przez program ciągle rośnie.
Przy uruchomieniu jest 4MB po kilku dniach 40MB.
Może ktoś wie dlaczego?

zrobiłem sobie nawet testowy programik:

procedure TForm1.TimerStartTimer(Sender: TObject);
var
s : string;
begin
adoq1.SQL.Clear;
adoq1.SQL.Add('select * from tabela1');
adoq1.Open;
while Not adoq1.Eof do
begin
s:=adoq1['nazwisko'];
adoq1.next;
end;
adoq1.close;
end;

Zauważyłem, że pamięć zajmowana przez program ciągle rośnie.
Przy uruchomieniu jest 4MB po kilku dniach 40MB.
Może ktoś wie dlaczego?

0

zamień Ado na ZeosLIB i zobacz czy będzie tak samo

0

Stwórz nowy projekt. Nic nie zmieniaj - uruchom. W menedżerze zadań sprawdź użycie pamięci (około 3500KB), zminimalizuj aplikację (około 700KB), a następnie przywróć (1400K). Gdzie się podziały te 2MB? Oto tajemnica Delphi :)

Zminimalizuj swoją aplikację i przywóć - sprawdź ile wtedy zajmuje. Mi kiedyś taka operacja zwalniała w programie około 20MB! Nie wiem z czego to wynika.

0
Szczawik napisał(a)

Stwórz nowy projekt. Nic nie zmieniaj - uruchom. W menedżerze zadań sprawdź użycie pamięci (około 3500KB), zminimalizuj aplikację (około 700KB), a następnie przywróć (1400K). Gdzie się podziały te 2MB? Oto tajemnica Delphi :)

Pewnie chodzi o pamięć ekranu (okna).
Delphi rysuje po jakiejś bitmapie i dopiero wtedy kopiuje ją na ekran.
Niby ma to coś przyśpieszać, ale nowe karty graficzne rysują tak samo szybko po ekranie jak po bitmapie (memorydc), a tu dochodzi jeszcze kopiowanie i dodatkowa pamięć: 1000x1000x32bpp = 4MB.

0

sprawdz czy czegos nie zostawiasz, a czasem tez zamknij transakcje i połączenie, ew. czasem commituj. Nie znam komponentów ale może to być tak ze przechowywane są dane jakbyśchciał zreobić rollbacka..

0

Rollback to chyba kwestia serwera nie stacji. Poco aplikacja miala by trzymac dane na wypadek Rollback?

1 użytkowników online, w tym zalogowanych: 0, gości: 1