IDisposable to interfejs w bibliotece klas podstawowych (BCL) środowiska Microsoft .NET Framework. Jego celem jest zapewnienie ogólnej, deterministycznej metody zwalniania niezarządzanych zasobów w kodzie aplikacji .NET.
Wiem z lektury dokumentacji Microsoft, że „podstawowe” użycieIDisposable interfejsu jest czyszczenie niezarządzanych zasobów. Dla mnie „niezarządzany” oznacza takie rzeczy, jak połączenia z bazą danych, gniazda, uchwyty okien itp. Ale widziałem kod, w którym Dispose()metoda jest zaimplementowana w celu swobodnego zarządzania zasobów, co wydaje mi się zbędne, ponieważ śmieciarz powinien zająć …
C # 2008 Pracuję nad tym od dłuższego czasu i nadal jestem zdezorientowany co do użycia metod finalizacji i usuwania w kodzie. Moje pytania są poniżej: Wiem, że potrzebujemy tylko finalizatora, który pozbywa się niezarządzanych zasobów. Jeśli jednak istnieją zasoby zarządzane, które wykonują połączenia z zasobami niezarządzanymi, czy nadal będzie …
System.Net.Http.HttpClient i System.Net.Http.HttpClientHandler w .NET Framework 4.5 implementują IDisposable (przez System.Net.Http.HttpMessageInvoker ). Dokumentacja usingoświadczenia mówi: Z reguły, gdy używasz obiektu IDisposable, powinieneś zadeklarować go i utworzyć jego instancję w instrukcji using. Ta odpowiedź wykorzystuje ten wzorzec: var baseAddress = new Uri("http://example.com"); var cookieContainer = new CookieContainer(); using (var handler = …
Zarówno DataSet, jak i DataTable implementują IDisposable, więc zgodnie z tradycyjnymi najlepszymi praktykami powinienem wywołać ich metody Dispose (). Jednak z tego, co przeczytałem do tej pory, DataSet i DataTable nie mają w rzeczywistości żadnych niezarządzanych zasobów, więc Dispose () tak naprawdę niewiele robi. Ponadto nie mogę po prostu użyć, …
Coś jak: using (IDisposable disposable = GetSomeDisposable()) { //..... //...... return Stg(); } Uważam, że nie jest to właściwe miejsce na oświadczenie zwrotne, prawda?
Czy użycie usinginstrukcji na (potencjalnie) pustym obiekcie jest bezpieczne? Rozważmy następujący przykład: class Test { IDisposable GetObject(string name) { // returns null if not found } void DoSomething() { using (IDisposable x = GetObject("invalid name")) { if (x != null) { // etc... } } } } Czy jest zagwarantowane, …
Klasy takich jak Stream, StreamReader, StreamWriteritp osprzęt IDisposableinterfejsu. Oznacza to, że możemy wywołać Dispose()metodę na obiektach tych klas. Zdefiniowali również publicmetodę o nazwie Close(). To mnie wprawia w zakłopotanie, co mam nazwać, gdy skończę z przedmiotami? A jeśli zadzwonię do obu? Mój obecny kod to: using (Stream responseStream = response.GetResponseStream()) …
Zacznij od tych prostych zajęć ... Powiedzmy, że mam prosty zestaw klas, taki jak ten: class Bus { Driver busDriver = new Driver(); } class Driver { Shoe[] shoes = { new Shoe(), new Shoe() }; } class Shoe { Shoelace lace = new Shoelace(); } class Shoelace { bool …
Wzorzec .NET IDisposable oznacza, że jeśli napiszesz finalizator i zaimplementujesz IDisposable, finalizator musi jawnie wywołać Dispose. Jest to logiczne i zawsze to robiłem w rzadkich sytuacjach, gdy finalizator jest uzasadniony. Jednak co się stanie, jeśli po prostu to zrobię: class Foo : IDisposable { public void Dispose(){ CloseSomeHandle(); } } …
Mam następujący kod using(MemoryStream ms = new MemoryStream()) { //code return 0; } dispose()Metoda jest wywoływana na końcu usingzestawienia szelki }prawda? Skoro ja returnprzed końcem usingoświadczenia, czy MemoryStreamprzedmiot zostanie zutylizowany prawidłowo? co się tutaj stało?
Czy istnieje metoda lub inny lekki sposób sprawdzenia, czy odniesienie dotyczy usuniętego obiektu? PS - To tylko ciekawostka (śpij dobrze, nie w kodzie produkcyjnym). Tak, wiem, że mogę złapać ObjectDisposedExceptionpróbę uzyskania dostępu do członka obiektu.
Przechodzę przez dużą refaktoryzację / poprawianie szybkości jednej z moich większych aplikacji MVC. Został wdrożony do produkcji od kilku miesięcy i zacząłem otrzymywać limity czasu oczekiwania na połączenia w puli połączeń. Wyśledziłem problem do nieprawidłowego usunięcia połączeń. W związku z tym dokonałem tej zmiany w moim kontrolerze podstawowym: public class …
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.