Wiele razy spotkałem się z oświadczeniem, że aplikacja powinna zawsze jawnie zamykać wszystkie zasoby, które otworzyła.Czy zamknięcie zasobów jest zawsze ważne?
Moje podejście do programowania jest raczej pragmatyczne i nie lubię ślepo podążać za konwencją, której nie dostrzegam. Stąd moje pytanie.
Załóżmy, że:
- Mam małą aplikację
- otwiera niewiele zasobów (np plików, połączenia z bazą danych, zdalny strumienie) i przetwarza go
- Działa kilka minut, a następnie wysuwanego
- Powiedzmy to w Javie (jeśli język jest istotne)
Czy naprawdę muszę dbać o cl osing wszystkie zasoby, które otworzyłem? Domyślam się, że wszystkie zasoby, które otwieram, zostaną zamknięte/zwolnione po wyjściu aplikacji/maszyny wirtualnej. Czy mam rację?
Jeśli to prawda, czy istnieją przekonujące powody, aby dbać o zamykanie zasobów w tak małej, krótkiej aplikacji?
UPDATE:
pytanie jest czysto hipotetyczne, ale argument dla nie dbając o to, że mogę być po prostu hacking razem niektóre szybkie skrypt i nie chce pisać niepotrzebnego kodu nie związane bezpośrednio do problemu: zamykanie zasobów, robienie tych wszystkich gadatliwych rzeczy, próbowanie chwytania, obsługa wyjątków, na których mi nie zależy itd.
Pytanie brzmi, czy są jakieś praktyczne konsekwencje nie robię tego.
Pozwolę sobie odpowiedzieć na pytanie: dlaczego ** nie powinniście dbać o zamykanie zasobów? –
"Domyślam się, że wszystkie zasoby, które otworzyłem, zostaną zamknięte/zwolnione, gdy aplikacja/maszyna wirtualna zostanie zamknięta." -> Zgaduję, że to nie jest prawda. Jeśli nie zamkniesz i maszyny wirtualne zostaną zamknięte, system operacyjny może zostać odpowiedzialny za zamknięcie tych strumieni/gniazd. – kosa
Aby pozbyć się ostrzeżeń, musielibyśmy je zignorować, co jest równoznaczne z pracą .close(). Również jest to dobra forma. –