私たちは、指定された時間に数十または数百のワークフローを実行しなければならないWebアプリケーションを持っています。ワークフロー定義を再利用する必要がありますか?
ActivityXamlServices.Load(xamlReader, activityXamlServicesSettings);
だから我々は、ワークフローをキャッシュするために考えている(生成された活性は、Loadメソッドによって返されるオブジェクト:多くの時間を過ごした後、私たちは、パフォーマンスのボトルネックは、ワークフローのdeserialising(私たちは、データベース内のXAMLを保つ)であることを知っています)。これはかなりのパフォーマンスを向上させるようです。私が見ることのできる唯一の問題は、ワークフロー定義/ツリーからのアクティビティがワークフローインスタンス間で再利用されることです。したがって、アクティビティがあるインスタンスで状態が変更された場合、別の実行中のインスタンスの動作が変更される可能性があります。
注:ワークフロー変数は、ワークフローインスタンス間で共有されていないようです。
編集:同様の質問がありました。Workflow 4 runtime compiling。質問所有者は、「DynamicActivityのキャッシング」(Loadメソッドによって返されたアクティビティ)と同じソリューションに到着したようです。
このキャッシュは、これまでの我々のシステムでは、我々は何のエッジケースの問題がないようにしたい正常に動作するようですしながら。私の懸案事項は、ワークフローがロードされたときに作成されたアクティビティオブジェクトがワークフローインスタンス間で再利用され、アクティビティに状態がある場合、これが問題になることです(あるインスタンスが別のインスタンスの動作を変更する可能性があります)。 – Valentin
XAMLドキュメントを逆シリアル化することによって得られるアクティビティオブジェクトは、ワークフローの青写真に過ぎません。実行中のワークフローの「状態」情報は含まれていません。したがって、繰り返し使用するために、そのアクティビティオブジェクトをキャッシュすることができます。この小さな情報を反映するように私の答えを更新します。 – ajawad987
私は、公式のWFドキュメントサイトで青写真であることについて言及していません。コードや公式ドキュメントのリンクはありますか?私がカスタムアクティビティでロギングを使用して観察したことは、カスタムアクティビティの新しいオブジェクトを作成することがありますが、ワークフローインスタンスごとに再利用することがあることです。私はパターンがあると感じていますが、依然として調査中です。 – Valentin