2016-08-18 82 views
1

我的服務結構參與者可以在其工作期間在內存中創建一些大型數據結構。我不想在每個方法調用結束時更新可靠的集合。 只能在OnDeactivateAsync方法中通過StateManager保存我的actor狀態並在OnActivateAsync方法中恢復它嗎?在這種情況下,我可能會失去國家嗎?在OnDeactivateAsync中保存狀態

+0

你擔心垃圾收集器可以收集存儲在演員的對象不是演員的狀態裏面的變量?或者您不確定是否有可能在OnDeactivateAsync和OnActivateAsync中更改狀態? – cassandrad

+0

@cassandrad我知道可以在OnDeactivateAsync中保存狀態,但它是保存狀態的代碼中的推薦位置嗎?我以前在每次更改時都保存了狀態,但我認爲這種方法可能會在方法調用頻繁且狀態大小很大時在集羣上造成低效的負載。 –

+1

如果參與者或其基礎服務或節點崩潰,則會丟失數據。如果你可以負擔鬆動狀態,或者可以在Actor ActivateAsync中重建它,你可以保持該結構爲類成員。 (就像普通的poco一樣) – LoekD

回答

3

如果參與者或其基礎服務或節點崩潰,您將丟失數據。如果你可以負擔鬆動狀態,或者可以在Actor ActivateAsync中重建它,你可以保持該結構爲類成員。 (如在一個普通POCO)

(張貼anwser)