Jak poważne może być NIE wypisywanie się z wydarzeń w języku C#? Czy jest to działanie obowiązkowe lub zalecane?Czy konieczne jest wypisanie się z wydarzeń?
Odpowiedz
Jest to ważna część z MSDN documentation, które należy wziąć pod uwagę
Aby zapobiec obsługi zdarzeń z powołano gdy zdarzenie jest podniesiony, po prostu zrezygnować z imprezy . Aby zapobiec wyciekom zasobów , ważne jest, aby anulować subskrypcję ze zdarzeń przed pozbyciem się obiektu subskrybenta . Aż się wypisać z wypadku, multicast delegat, który leży u podstaw zdarzenie w obiekcie wydawniczym ma odniesienie do delegata że hermetyzuje zdarzeń obsługi abonenta. Dopóki publikowany obiekt przechowuje to odwołanie, Twój obiekt subskrybenta nie będzie zbiorem śmieci .
Zależy od tego, jak długo żyją subskrybenci i wydawcy. Poniżej znajduje się szczegółowy artykuł na temat problemu i kilka metod jego rozwiązania: Solving the Problem with Events: Weak Event Handlers
Ważne jest, aby zrezygnować z subskrypcji. Jeśli tego nie zrobisz, subskrybent nie będzie mógł zbierać śmieci, co prowadzi do - w gruncie rzeczy - wycieku pamięci. Tutaj jest dobrym przykładem problemów może napotkasz jeśli nie wypisać:
http://developers.slashdot.org/article.pl?sid=07/11/17/0552247
Ponadto, może to prowadzić do problemów z wydajnością, jak obsługi zdarzeń w dalszym ciągu będzie się nazywać, mimo że nie robi cokolwiek przydatnego dla ciebie.
Z drugiej strony, jeśli kończysz wykonywanie programu, nie ma powodu, aby rezygnować z wydarzeń. Z pewnością nie jest to obowiązkowe i nie widzę powodu, aby go polecać.
- 1. Czy konieczne jest wypisanie się z obserwowalności stworzonych metodami Http?
- 2. Czy konieczne jest wyrażenie math.sqrt()?
- 3. Czy executePendingTransactions() jest zawsze konieczne?
- 4. Czy konieczne jest usunięcie w destruktorze?
- 5. Czy konieczne jest stałe pobieranie w RXTX?
- 6. Jak ustalić, czy Kopiowanie lokalne jest konieczne?
- 7. Erlang, Czy konieczne jest zamknięcie pliku tutaj?
- 8. Czy konieczne jest użycie InitCommonControlsEx() i InitCommonControls()?
- 9. Czy konieczne jest zamknięcie strumienia metody WebInvoke
- 10. Czy konieczne jest tutaj `std :: move`?
- 11. Czy konieczne jest użycie Forever.js na OpenShift?
- 12. Wypisanie listy ramek danych
- 13. Czy konieczne jest zadeklarowanie AtomicReference jako zmiennej?
- 14. Czy konieczne jest ustawienie domeny NetworkCredential?
- 15. AngularJs - RXJS Obserwowalny wypisanie
- 16. Backbone model.destroy(): Czy konieczne jest jawne usunięcie z kolekcji?
- 17. Angular2, wypisanie z wydarzenia w ngOnDestroy
- 18. Czy konieczne jest wyrejestrowanie komponentu MBean z serwera MBean platformy?
- 19. Czy obiekt Funkcja konieczne
- 20. Korzystanie z tego czasami jest konieczne?
- 21. Czy konieczne jest wyrejestrowanie gniazda z epola przed jego zamknięciem?
- 22. Czy jest konieczne użycie kthread_stop, jeśli wrócimy z wątku jądra?
- 23. Czy konieczne jest sprawdzenie, czy element ma atrybut?
- 24. sprowadzają się do wydarzeń odstępach czasowych
- 25. Czy jest jakiś strumień wiadomości (strumień wydarzeń/aktywności)?
- 26. Czy jest konieczne uzyskanie dostępu do bazy SQLite w AsyncTask?
- 27. Czy konieczne jest zmienne zmienne pętli zakresu w CFScript?
- 28. Czy konieczne jest zoptymalizowanie indeksu lucenu po zapisie?
- 29. Czy konieczne jest tworzenie klasy Java za każdym razem?
- 30. Wyrejestrowanie z wydarzeń w ObservableCollection