2012-03-06 32 views
1

刪除事件處理程序我最近建立了一個示例應用程序,其中我實現了事件和委託,當屬性值改變本次活動將提高,我有一個關於事件中添加和.NET

  1. 問題事件對象是否在內存中創建?或者它們只是一旦事件被觸發就會被移除的靜態對象?

  2. 事件執行後是否需要刪除處理程序,以釋放資源。不去除處理完成一次,提高的了應用程序的性能,我說的這是使用大量的事件

回答

1

活動確實會存儲應用程序,並且不收集,直到你從他們取消後的垃圾。他們是memory leaks.

1
  1. 活動的常見原因可能是靜態和實例綁定。在事件廣播者活着的時候,事件的訂閱者不會被刪除,除非通過 - =運算符隱含地完成。

  2. 是的,是的,是的。如果你沒有清理你的用戶,你會有一個內存泄漏等待發生。

如果所有這些都是您所關心的,也許您可​​以查看WeakEvent模式。

0

events就像delegates(另一層保護)。

當你註冊一個事件 - 你實際上正在引用另一個對象。

這個對象不能通過GC,因爲你提到了它!

它不是「未參考」。

但您的對象CAN可以通過GC。 (如果未被引用)。

所以你最終會發生內存泄漏。

你應該手動刪除參考。