Wycieki pamięci w .Net. Czy to możliwe?

0

Witam.
Tak jak w temacie.
Podejrzewam swoją aplikację, że po wykonaniu pewnej operacji nie zwalnia całej pamięci, która była dostępna przed wykonaniem tej operacji. Gdy użyję tej operacji zostania zarezerwowana nowa pamięc, ale po jej zakończeniu nie zostanie przywrócona do stanu pierwotnego i mogę tak zrobić kilka razy i za każdym razem program będzie rezerwował coraz więcej pamięci.
Czy jest możliwe, że ten garbager collector(czy jakoś tak) nie zadziałał poprawnie w mojej aplikacji?

0

Czy jest możliwe, że ten garbager collector(czy jakoś tak) nie zadziałał poprawnie w mojej aplikacji?

Raczej jakoś tak, nvm. Niemożliwe żeby zadziałał niepoprawnie. Pamiętaj jednak że komputer robi nie to czego chce programista, ale to co programista zaprogramował :>

Prawdopowodnie masz jakiś duży zaalokowany obszar pamięci, do którego ciągle siedzi gdzieś jakaś referencja (jeśli jest referencja do pamięci to GC jej nie może zwolnić)...
Możliwe też że tylko Ci się wydaje że coraz więcej pamięci jest rezerwowane - GC nie ma obowiązku zwalniać pamięci do systemu, working set != zużycie pamięci. Ale jeśli zaczyna brakować RAM-u to coś się faktycznie dzieje.

Btw. jeden z moich licznych chomikowanych linków: http://xlab.pl/2011/04/net-i-memory-leak-czyli-dzien-z-zycia-programisty/

0

A Dispose używasz zawsze, gdy trzeba?

0

W ogóle tego nie używam, bo nigdy o tym nie słyszałem. Zaraz sobie sprawdzę co to jest.
Dodam jeszcze, że moja aplikacja jest wielowątkowa. Jest kilka wątków z pętlą w środku, ale gdy przestaję korzystać z tej tajemniczej operacji, o której przedtem wspominałem, warunek w tych pętlach jest ustawiany na false i tym samym wątek przestaję istnieć. No, chyba że wątki trzeba jakoś "odręcznie" skasować?

0

Przede wszystkim trzeba zwalniać zasoby, nie tylko pliki i połączenia sieciowe, ale np. wczytane do pamięci bitmapy.
Dopóki nie napiszesz o co dokładnie chodzi albo nie pokażesz kodu, możemy jedynie uprawiać wróżbiarstwo, co się nam szybko znudzi.

0

Od siebie dodam tylko byś jeszcze poczytał o using.
Ja zwalniając pamięć przy pomocy dispose() nie osiągałem zawsze takich efektów jak chciałem (po prostu nie zwalniało się nic, bo GC odkładał sobie to).
Dopiero zastosowanie using doprowadziło do sukcesu.

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