アプリの起動時とシャットダウン時に状態を管理するために、オブジェクトにGUIDを割り当てる必要があります。を使用してルックアップ値を辞書に保存できるようです。
dictionary<int,Guid>.Add(instance.GetHashCode(), myGUID());
ここで知っておくべき潜在的な問題はありますか?
ノート
これは、実行の実行間で持続する必要はありません。そのようなGUIDのみです。
- オブジェクトを作成します
- gethashcode()、新しいまたは古いGUIDに関連付ける
アプリが終了する前に、gethashcode()とルックアップGUIDを使用して、GUIDを使用して永続化エンジンにupdate()またはinsert()します。
唯一の前提は、プロセスの実行中、gethashcode()の一貫性が維持されることです。
また、gethashcode()は同じオブジェクトタイプ(ウィンドウから派生)で呼び出されます
アップデート2-これが全体像です
- 実行間でWPFユーザーコントロール(後でUCとして参照)に関する情報を格納するステートマシンを作成します
- ユーザーコントロールの種類は時間の経過とともに変化する可能性があります(追加/削除)
- 最初の実行では、以前の状態はありません。ユーザーはUCのサブセットと対話し、状態を変更します。これは、アプリの再起動時に再作成する必要があります。
- この状態のスナップショットは、アプリが通常のシャットダウンを行ったときに取得されます
- また、UCタイプの複数のインスタンスが存在する可能性があります
- シャットダウン時に、各インスタンスにGUIDが割り当てられ、タイプ情報と状態情報とともに保存されます
- これらのGUIDもすべてコレクションに保存されます
- 再起動時に、GUIDごとに、オブジェクトを作成し、ref / guidを保存し、インスタンスごとに状態を復元して、アプリが以前とまったく同じように見えるようにします
- ユーザーは、UCインスタンス/タイプを追加または削除したり、システムと対話したりできます。
- シャットダウン時に、状態は再び保存されます
- この時点での選択は、以前のすべての状態を削除/削除し、新しい状態情報を永続層(sql db)に挿入することです。
- 時間の経過に伴う観察/分析では、多くのインスタンスが一貫性/静的であり、変更されないことがわかります-状態情報が非常に大きくなり、非ローカルデータベースに保存されるため、状態を再度削除/挿入する必要はありません
- したがって、変更デルタのみが保持されます
- デルタを計算するには、参照の寿命を追跡する必要があります
- 現在
List<WeakReference>
、起動時に保存されています - シャットダウン時に、このリストと画面に表示されている実際のUCを繰り返し処理し、それに応じてキーを追加/更新/削除します
- デルタを永続性に送信する
上記がそれを明らかにすることを願っています。
WeakReference
だから今問題は-なぜリストを反復しながらnull参照のテストを排除する代わりに(usercontrolのみの)HashCodeを保存しないのですか?
更新3-すべてに感謝します。最後に弱参照を使用します