2015-08-17 90 views
-1

我有一個遊戲,玩家連接並看到一系列挑戰。在代碼中,挑戰以其狀態存儲在字典中,因此我有一個Dictionary<string, List<Challenge>>來存儲它們。優化使用C#事件?

我有一個類可以處理所有相關的挑戰操作,例如從服務器檢索它們,並且此類發送事件以通知感興趣的對象有關更新。我的問題是我的代理事件正在發送整個字典,我意識到這可能是垃圾創建甚至執行速度非常糟糕。

我的應用程序將運行在移動設備上,並且我在Unity上工作,因此我僅限於.Net 3.5(一些4個功能)。性能在這裏至關重要,所以我想知道這樣做會更有效率嗎?

我馬上看到的唯一事情就是從事件委託中刪除字典,並訪問我的單例實例變量而不是將其作爲參數。但我想確定沒有更好的方法,而且這確實會更有效率。

+3

當然你只是真的在傳遞對字典的引用,因爲字典是一個引用類型。在通過它之前,你沒有對字典進行克隆? –

+0

是的,你是對的。我擔心一些內部人員不得不創建臨時副本或類似的東西,但顯然沒有這樣的事情。 –

回答

2

類是reference typesDictionary<TKey, TValue>是一個類,因此,您不是複製字典,而是指向不同引用中的同一個引用(例如,提供對所謂字典的引用的事件引用)。

如果您非常擔心事件處理程序的內存問題,那麼可以看看weak event pattern,它可以防止某些使用情況中的某些內存泄漏(但您至少需要.NET 4.0 .. )。

+0

是的,沒有任何額外的開銷,這與我從探查器獲得的結果一致。 –

+0

@GeoffreyHug我很高興知道你可以得出一些結論;) –