簡體   English   中英

與事件共享對象

[英]Shared objects with Events

當前,我有一個對象,其中包含大量項目(運行時不會更改),這些項目占用大量內存,並且該對象將在多個會話(每個用戶)中使用,並且每個會話中的對象應相同。

因此,我決定將其用作共享資源,而不是在每個會話中復制大對象或創建新實例。 這樣,每個會話都將從對象的列表中讀取內容,以獲取項目並執行所需的操作。 我想節省內存,因為這是一個Web應用程序。

但是,列表中的這些項目也具有事件,並且每個會話都需要訂閱這些事件。

所以發生的事情是,當一個項目事件被觸發時,它會在所有會話中觸發它。 因此,我必須添加一些邏輯來檢查哪個會話觸發了此事件,並且僅將其用於該會話。

有一個更好的方法嗎? 更有效的方法? 恐怕如果要進行大量的用戶會話,當在這些共享項上觸發事件時,這真的會使處理陷入癱瘓。

你怎么看? 還要注意的是,在處理這些“項目”時,沒有辦法知道每個項目將花費多長時間,因此為什么我傾向於使用事件。

所以發生的事情是,當一個項目事件被觸發時,它會在所有會話中觸發它。 因此,我必須添加一些邏輯來檢查哪個會話觸發了此事件,並且僅將其用於該會話。

這意味着,每當請求啟動最終觸發該事件的操作時,共享數據中的事件仍會觸發,但是您可以防止該事件冒泡到每個會話。 盡管如此,這仍意味着在共享數據和所有會話之間創建事件處理程序。

有一個更好的方法嗎? 更有效的方法? 恐怕如果要進行大量的用戶會話,當在這些共享項上觸發事件時,這真的會使處理陷入癱瘓。

您的解決方案確實存在一些問題。 由於事件處理程序是在會話和共享數據之間創建的,因此會話過期時無法對會話對象進行垃圾回收(我假設您在會話終止時不清除事件處理程序,如果我錯了,請更正我)。 結果:內存泄漏。

你怎么看? 還要注意的是,在處理這些“項目”時,沒有辦法知道每個項目將花費多長時間,因此為什么我傾向於使用事件。

我不確定我理解你的意思。 當您不知道每個事件需要花費多長時間時,為什么事件可以解決任何問題? 事件及其事件處理程序仍按順序執行。

恐怕我無法為此提供更好的解決方案,因為它不清楚我在會話應用程序之間如何共享共享數據。 您已經在共享數據中提到了事件,但是它們如何工作? 您已經提到,該事件應僅由發起該操作的會話處理,因此我想一種解決方案是在啟動共享數據操作時為共享數據提供回調函數 然后可以在必要時調用回調函數,這樣就不會創建將會話對象綁定到共享數據的事件處理程序,因此垃圾回收不會成為問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM