Dlaczego ludzie myślą, że wyciek pamięci w .NET to nie to samo, co każdy inny wyciek?
Wyciek pamięci występuje, gdy przyłączasz się do zasobu i nie puszczasz go. Możesz to zrobić zarówno w kodowaniu zarządzanym, jak i niezarządzanym.
Jeśli chodzi o .NET i inne narzędzia programistyczne, pojawiły się pomysły dotyczące zbierania elementów bezużytecznych i innych sposobów minimalizowania sytuacji, które spowodują wyciek z aplikacji. Ale najlepszą metodą zapobiegania wyciekom pamięci jest zrozumienie swojego podstawowego modelu pamięci i tego, jak to działa na używanej platformie.
Wiara w to, że GC i inna magia oczyści twój bałagan, jest krótką drogą do wycieków pamięci i będzie trudna do znalezienia później.
Podczas kodowania niezarządzanego zwykle upewniasz się, że posprzątałeś, wiesz, że za posprzątanie zasobów, które posiadasz, odpowiadasz ty, a nie woźny.
Z drugiej strony w .NET wiele osób uważa, że GC wszystko wyczyści. Cóż, robi to dla ciebie, ale musisz się upewnić, że tak jest. NET zawiera wiele rzeczy, więc nie zawsze wiesz, czy masz do czynienia z zarządzanym, czy niezarządzanym zasobem, i musisz się upewnić, z czym masz do czynienia. Obsługa czcionek, zasobów GDI, Active Directory, baz danych itp. To zazwyczaj rzeczy, na które należy zwrócić uwagę.
Jeśli chodzi o zarządzanie, postawię szyję na krawędzi, aby powiedzieć, że zniknie, gdy proces zostanie zabity / usunięty.
Widzę jednak, że wiele osób to ma i naprawdę mam nadzieję, że to się skończy. Nie możesz poprosić użytkownika o zamknięcie aplikacji, aby posprzątać bałagan! Spójrz na przeglądarkę, która może być IE, FF itp., A następnie otwórz, powiedzmy, Czytnik Google, pozwól mu pozostać na kilka dni i zobacz, co się stanie.
Jeśli następnie otworzysz kolejną kartę w przeglądarce, przejdziesz do jakiejś witryny, a następnie zamkniesz kartę, na której była hostowana druga strona, która spowodowała wyciek przeglądarki, czy myślisz, że przeglądarka zwolni pamięć? Nie tak z IE. Na moim komputerze IE z łatwością zjada 1 GiB pamięci w krótkim czasie (około 3-4 dni), jeśli używam Czytnika Google. Niektóre gazety są jeszcze gorsze.