2008-12-05 186 views
5

做同樣的最好practis規則有關訂閱/退訂事件採用在asp.net?我是否需要在asp.net中取消訂閱(手動訂閱)事件?

我知道這可能看起來像一個愚蠢的問題,但是當我考慮它時,我從來沒有真正看到過任何代碼,人們首先訂閱頁面上的事件,然後在Web請求中退訂。

示例1: 在頁面上的Page_Load方法中,我訂閱了ListView上的更新事件。我是否應該稍後取消訂閱該事件,例如在OnPreRenderComplete方法中?

示例2: 在被動視圖模式中,每當需要演示者執行任何操作時,視圖(Page control/Usercontrol)都會引發事件。因此,演示者需要訂閱視圖上的事件,但是是否也需要再次取消訂閱事件?

最好的問候,埃吉爾。

回答

4

的頁面實例及其所有組件將「走出去的範圍」請求完成時,如他們有資格獲得GC。因此,您的ListView將隨頁面/用戶控件一起超出範圍。你不需要退訂(除非您訂閱屬於某種單身的那個倖存每個請求的事件並使用的頁面作爲事件處理程序的方法之一,例如)。 (因爲這主持人與一個頁面單獨使用,之後超出範圍只要再)

同樣的事情是有效的主持人。

+0

好,只是要確定我理解正確:如果我在asp.net緩存單獨的對象,當頁面外出演示不應認購上的事件,因爲單不會被佈置的範圍,主持人將因此四處流浪? – 2008-12-05 21:39:17

2

一般來說,沒有。事件應該在頁面卸載時自動轉儲。應該是。我之前遇到過一個bug(在.NET 1.1中),但事實並非如此。我不會打擾退訂,除非我發現頁面有問題(例如,一個方法從調用堆棧中的幻影調用20次:這通常表明某些東西沒有正確取消訂閱)。