この特定の問題は私を狂わせています。誰かが同じような問題を経験したのだろうか。ワークフローをロードしてからアンロードしてメモリスナップショットを実行すると、結果は予測可能になります。ワークフローはメモリに存在しなくなります。ただし、ワークフローをロードしてPersistableIdleアクションをPersistableIdleAction.Unloadに設定し、ワークフローをアイドル状態にすると、Unloadアクションが実行されてもワークフローはメモリに残ります。
この問題をデバッグするためにANTSメモリプロファイラーを使用しました。これは、内部オブジェクトがワークフローインスタンスにぶら下がっていることを示す、出力されたオブジェクト保持グラフです。
(出典:rohland.co.za)
他の誰かがこの問題を確認できますか?私のコードは次のようになります。
- SqlWorkflowInstanceStoreを作成し、ロック所有者ハンドルを設定します
-この時点で、メモリスナップショットを取得します - Workflow1のインスタンスを作成します
- PersistableIdleアクションを設定します
- インスタンスストアをWorkflow1に適用します
- Idle、Unload、UnhandledExceptionなどのアクションイベントハンドラーを設定します。
- ワークフローインスタンスを永続化する
- ワークフローインスタンスを実行します
- インスタンスがアイドル状態になるのを待ちます(遅延アクティビティが原因)
- アンロードアクションが実行されていることを確認します
-この時点で、2番目のメモリスナップショットを作成します
上の画像から、Workflow1を参照している唯一のオブジェクトは、処理できない内部イベントハンドラーの結果であることが明らかです。
手がかりはありますか?