Program a pamięć...

0

Witam..

Mam programik, który po odpaleniu zajmuje w pamięci ok. 5000 K. Wykonuje np. operację na tekście: ładuje dużo tekstu do RichEdit-a i program zajmuje w pamięci 10000 K.
Następnie czyszczę RichEdit-a, ale pamięci, którą zajmuje program zwalnia się tylko ok 200 K.

W czym tkwi błąd i czy jest na to jakiś sposób ??

Pozdrawiam

0

Może zwalniaj całego RichEdita, a potem go sobie twórz, jak ci potrzeba?

0

Zwolnienie komponentów pomogło o ok. 1200 K...

Jak kopiuje do ClipBoard z danego programu to pamięć jest zajmowana przez dany program czy jest to ogólne dla wszystkich aplikacji ??

Jak wyczyścić ClipBoard ??

Pzdr

0

Jak wyczyścić ClipBoard ??

Może ClipBoard.AsText:=''?

0

Clipboard.Free, AsText:='', Clear sprawdziłem i nie pomaga.

Już nie mam pomysłów ????

Może ktoś optymalizował swój program pod tym względem...
Proszę o jakieś wskazówki.

Pzdr

0

pamięć się nigdy dokładnie nie czyści po żadnym programie. Zostaje w pamięci ale można na to nadpisywać. Chyba bo po uruchomieniu kilku progsów i zgaszeniu ich mam mniej pamięci a jak uruchomie prog do czyszczenia ramu to odzyskuje.

0

pamięć się nigdy dokładnie nie czyści po żadnym programie. Zostaje w pamięci ale można na to nadpisywać. Chyba bo po uruchomieniu kilku progsów i zgaszeniu ich mam mniej pamięci a jak uruchomie prog do czyszczenia ramu to odzyskuje.

jest program do czyszczenia pamięci ram pod xp: RamXP :d :d

0

Daj ta procedurke np. pod Button a wyczysci ci schowek.

OpenClipboard(Application.MainForm.Handle);
EmptyClipboard;
CloseClipboard;
0

Dziwne rzeczy dzieją się z tą pamięcią...
Czyszczenie schowka metodą, którą podał Fixer niestety nie pomaga (jak i poprzednie - które wszystkie wypróbowałem).

Zauważyłem, że tak dzieje się z innymi programami, np. z Gadu.
Wystarczy uruchamiać okna do rozmowy z poszczególnymi kontaktami i zamykać je.
Po odpaleniu 10 skoczyło mi z 4000 K na 16 000 K.

Zakładam możliwość operowania na dużych zasobach tekstu w swoim programie, używania wielu funkcji i opcji, a to zwiększy znacznie ilość zajmowanej pamięci.
Nie chciałbym napisać w pomocy swojego programu, iż w przypadku gdy brakuje Ci pamięci uruchom program ponownie albo uruchom program do czyszczenia pamięci RAM.

W takim razie jak zabrać się progamowo do oczyszczania pamięci - przynajmniej swojej aplikacji...

Pzdr

0

Zauważyłem, że tak dzieje się z innymi programami, np. z Gadu.
Wystarczy uruchamiać okna do rozmowy z poszczególnymi kontaktami i zamykać je.
Po odpaleniu 10 skoczyło mi z 4000 K na 16 000 K.

To jest logiczne. GG tworzy i otwiera pełno okienek, które zamyka, ale ich nie niszczy (w razie, gdybyś chciał je jeszcze raz otworzyć i przeczytać, co pisałeś), co oczywiście zwiększa użycie pamięci.

0

Dla mnie to nie jest zbyt logiczne, ponieważ równie dobrze mógłby je niszczyć, a przy ponownym uruchomieniu wczytywać ostatnią rozmowę, co zapewne nie zajęło by zbyt dużo czasu. A poza tym jeżeli ktos czyta to co napisał np. 20 min temu może skorzystać z archiwum.

Ale chciałbym powrócić do głównego problemu - czyli jak sobie poradzić z zwalnianiem pamięci własnej aplikacji...

0

Może i nie jest to najlepsze rozwiązanie, ale GG tak to właśnie robi... Logiczne są więc następstwa tego.

0

Więc apel do Autorów Gadu...

A mój problem ??
Na jakiej zasadzie działają programy oczyszczające RAM i jak się do tego zabrać ??

0

alokują dużą ilość pamięci, a potem ją zwalniają.

a z tym znikaniem pamięci to nie do końca tak - każdy program (w win 2000) po minimalizacji zużywa wedle menedżera programów mniej pamięci; być może to kwestia zasobów gui - nie wiem, dość że to nie tylko gg prezentuje taki fenomen.

0

Rzeczywiście się zwalnia cała pamięć przy minimalizacji.
Więc co takiego się dzieje z aplikacją ??
Zaglądałem trochę w źródełka i ciężko mi coś z tamtąd wyciągnąć.
Może da się wywołać jakieś funkcję bez minimalizacji okna...

0

Czy ktoś może mi jakoś pomóc w tej kwestii ??
Zależy mi na małym zużyciu pamięci...

0

Rzeczywiście się zwalnia cała pamięć przy minimalizacji.
Więc co takiego się dzieje z aplikacją ??

Nic, po prostu aplikacja przestaje sie odrysowywac.

Jesli chodzi o problem, to z duzym tekstem mozesz sobie poradzic przez buforowanie go, czyli wczytujesz jakis tam kawalek kodu zaleznie od polozenia suwaka (strasznie duzo roboty, ale zawsze o jeden wiecej pomysl), a funkcje najlepiej do dynamicznego dlla, choc nie wiem, jaki program to by musial byc, zeby funkcje ci zabieraly cala pamiec. A programy zwalniajace pamiec raczej nic tu nie pomoga, w ogole nie wiem, po co cos takiego ktos robi.

0

Drumers, a czy ty wiesz, ze w pierwszym przykladzie trzeba dodac do uses Clipbrd? I jeszcze pozniej w jakiejs procedurze:

var
Clipboard: TClipBoard;
begin
Clipboard := TClipBoard.Create;
ClipBoard.asText := '';
ClipBoard.Free;
end;

P.S. ClipBoard.Free zwalnia modul, zeby nie zajmowal juz tyle pamieci, a nie oproznia pamiec

0

Wiem, że trzeba tak zrobić...

Wolverine napisał, że aplikcja przestaje się odrysowywać.
Ale jednak coś nie gra...

Odpalam mój program i nic w nim nie ruszam. Zajmuje 4700K. Minimalizuje go i 500K. Ale, gdy ponownie go zmaksymalizuje jest już tylko 1500K. W między czasie nic w nim robie.

I to mnie tak zastanawia. Co się dzieje?

Pzdr

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