Tak tam przeciek , w zależności od sposobu zdefiniowania przeciekać i jak dużo później masz na myśli ...
Jeśli przez przeciek masz na myśli "pamięć pozostaje przydzielona, niedostępna do użycia, nawet jeśli skończyłeś z niej korzystać", a przez to w dowolnym momencie po wywołaniu dispose, to tak, może być przeciek, chociaż nie jest trwały (np. czas działania aplikacji).
Aby zwolnić pamięć zarządzaną używaną przez MemoryStream, należy usunąć odwołanie do niej, anulując odwołanie do niej, aby od razu kwalifikowała się do wyrzucania elementów bezużytecznych. Jeśli tego nie zrobisz, utworzysz tymczasowy wyciek od czasu, gdy skończysz go używać, aż twoje odniesienie wyjdzie poza zakres, ponieważ w międzyczasie pamięć nie będzie dostępna do alokacji.
Zaletą instrukcji using (w porównaniu z prostym wywołaniem metody dispose) jest to, że można ZADEKLAROWAĆ swoje odwołanie w instrukcji using. Po zakończeniu instrukcji using nie tylko jest wywoływana dispose, ale również twoje odniesienie wychodzi poza zakres, skutecznie unieważniając odniesienie i czyniąc obiekt natychmiast kwalifikującym się do czyszczenia pamięci bez konieczności pamiętania o napisaniu kodu „reference = null”.
Chociaż brak odwołania do czegoś od razu nie jest klasycznym „trwałym” wyciekiem pamięci, to z pewnością ma ten sam efekt. Na przykład, jeśli zachowasz odniesienie do MemoryStream (nawet po wywołaniu dispose) i nieco dalej w swojej metodzie spróbujesz przydzielić więcej pamięci ... pamięć używana przez twój wciąż przywoływany strumień pamięci nie będzie dostępna do Ciebie, dopóki nie unieważnisz odwołania lub nie wyjdzie ono poza zakres, nawet jeśli wywołałeś dispose i skończyłeś z nim korzystać.