Twoje pytanie, czy zawsze powinieneś dzwonić, Disposejest zwykle gorącą debatą. Zobacz ten blog, aby poznać ciekawą perspektywę szanowanych osób w społeczności .NET.
Osobiście uważam, że stanowisko Jeffreya Richtera, że sprawdzanie Disposenie jest obowiązkowe, jest niesamowicie słabe. Podaje dwa przykłady na uzasadnienie swojej opinii.
W pierwszym przykładzie mówi, że wywoływanie Disposekontrolek Windows Forms jest żmudne i niepotrzebne w głównych scenariuszach. Jednak nie wspomina, że Disposefaktycznie jest wywoływana automatycznie przez kontenery kontrolne w tych głównych scenariuszach.
W drugim przykładzie stwierdza, że programista może błędnie założyć, że instancja from IAsyncResult.WaitHandlepowinna zostać agresywnie usunięta, nie zdając sobie sprawy, że właściwość leniwie inicjuje uchwyt oczekiwania, co skutkuje niepotrzebnym spadkiem wydajności. Ale problem z tym przykładem polega na tym, że IAsyncResultsam w sobie nie jest zgodny z opublikowanymi przez Microsoft wytycznymi dotyczącymi postępowania z IDisposableobiektami. Oznacza to, że jeśli klasa zawiera odniesienie do IDisposabletypu, to sama klasa powinna implementować IDisposable. Gdyby postępowano IAsyncResultzgodnie z tą zasadą, wówczas jego własna Disposemetoda mogłaby podjąć decyzję dotyczącą tego, którego z jej członków należy usunąć.
Więc jeśli ktoś nie ma bardziej przekonujących argumentów, pozostanę w obozie „zawsze wzywaj utylizację” ze zrozumieniem, że będą pewne przypadki poboczne, które wynikną głównie ze złych wyborów projektowych.
usingkonstrukcji.