Problem z zasobami pamięci

0

Zauważyłem jedną rzecz:

mam sobie formę główną, w niej TabPager. Gdy przeglądam sobie poszczególne taby to zużycie pamięci w menedzerze jednarozowo rośnie(nie nie, wycieków nie ma). Gdybym miał każdą zakładkę jako osobna forme to nie byloby problemu: dynamicznie utworzyć i zwolnić zasoby. A tu jakieś mam wyjście zeby oczyscic pamiec ? Tworzenie dynamicznie tabpagera i kazdych jego elementow na klik tab'a jest niewygodne(gdy chce sobie cos zmienic/dodac wizualnie).
Gdy zuzycie wzrosnie do okolo 60MB wywala mi czasem windowsowy komunikat o przekroczonych zasobach.
Aplikacja jest dosc duza, w kazdym tabie po kilka gridow, czytanych danych z bazy. Cos sie da poradzic ? TabPager jest najporeczniejszy, gdybym mial wszystko jako osobne formy, to uzytkowanie staloby sie niewygodne.

Znalazlem takie cos w google:

        MainHandle := OpenProcess(PROCESS_ALL_ACCESS, false, GetCurrentProcessID) ;
        SetProcessWorkingSetSize(MainHandle, $FFFFFFFF, $FFFFFFFF) ;
        CloseHandle(MainHandle) ;

Dalem w Timer co minute to, dziala niezle(czysci z 60MB do 8MB)
Ale prawde mowiac nie lubie okreznych dróg.
Moglby ktos powiedziec takze CO DOKLADNIE to robi, i czy to jest bezpieczne ?

0

Użycie OpenProcess do otwarcia własnego procesu jest lekkim błędem, pseudouchwyt posiadający wszystkie możliwe uprawnienia zwraca GetCurrentProcess.

SetProcessWorkingSetSize ustawia rozmiar pamięci, którą proces może mieć bezpośrednio w pamięci fizycznej. Innymi słowy ile stron pamięci procesu siedzi w RAMie, ile zaś w swapie. Użycie z argumentem -1 (jak wyżej) to specyficzny przypadek, równoważny wywołaniu EmptyWorkingSet. Efektem jest przeniesienie jak największej liczby stron używanych przez program do swapu. Często używane w charakterze 'oszustwa' przez programistów - Menadżer Zadań pokazuje domyślnie rozmiar aktualnego working setu, nie zaś ile proces prywatnej pamięci ma przydzielone. Strony wracają do pamięci fizycznej dopiero w momencie użycia, w efekcie po opróżnieniu (wyswapowaniu większości pamięci) następuje gwałtowny spadek 'użycia pamięci', które potem sukcesywnie rośnie.

Kod jest bezpieczny, nie robi nic użytecznego. Na Twoim miejscu zastanowiłbym się czy problemem nie jest fragmentacja pamięci.

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