2017-10-09 4 views
0

Nous avons une application web qui doit exécuter des dizaines ou des centaines de workflows dans un temps donné. Après de nombreuses heures passées, nous savons que le goulot d'étranglement de performance est le deserialising des flux de travail (nous gardons la XAML dans la base de données):Dois-je réutiliser une définition de workflow?

ActivityXamlServices.Load(xamlReader, activityXamlServicesSettings); 

Nous pensons donc à mettre en cache les flux de travail (les objets d'activité généré est retourné par la méthode de charge). Cela semble améliorer la performance un peu. Le seul problème possible que je peux voir est que les activités (à partir de la définition/arbre de workflow) seront réutilisées entre les instances de workflow. Ainsi, si une activité a changé d'état dans une instance, elle peut changer le comportement d'une autre instance en cours d'exécution.

Remarque: les variables de workflow ne semblent pas être partagées entre les instances de workflow.

EDIT: Quelque chose de similaire a été demandé: Workflow 4 runtime compiling. Le propriétaire de la question semble être arrivé à la même solution de "mise en cache de la DynamicActivity" (l'activité renvoyée par la méthode Load).

Répondre

0

Oui, vous pouvez certainement réutiliser l'objet d'activité dynamique que vous récupérez du code XAML désérialisé autant de fois que vous le souhaitez. Vous pouvez créer autant d'objets WorkflowApplication que vous le souhaitez.

{modifier}

L'objet d'activité que vous obtenez de désérialisation un document XAML est juste un plan de votre flux de travail. Il ne contient aucune information d'état et peut donc être réutilisé autant de fois que vous le souhaitez pour créer des instances WorkflowApplication depuis (ou même la classe d'utilitaire WorkflowInvoker).

{} EndEdit

+0

Bien que cette mise en cache semble fonctionner très bien jusqu'à présent dans notre système que nous voulons faire, il n'y a pas de problèmes de cas limites. Mon problème est que les objets Activity (créés lorsque le flux de travail est chargé) sont réutilisés entre les instances de workflow et que si l'activité a un état, cela peut poser problème (une instance peut modifier le comportement d'une autre). – Valentin

+0

L'objet d'activité issu de la désérialisation d'un document XAML est simplement un plan de votre flux de travail. Il ne contient aucune information "state" d'un workflow en cours d'exécution. Donc, vous serez bien en train de mettre en cache cet objet d'activité pour une utilisation répétée. Je mettrai à jour ma réponse pour refléter ce petit peu d'information. – ajawad987

+0

Je n'ai jamais vu de plan détaillé sur le site de documentation officiel de WF. Avez-vous du code ou des liens officiels? Ce que j'ai observé en utilisant la journalisation dans mes activités personnalisées est qu'il crée parfois de nouveaux objets de mes activités personnalisées mais parfois il les réutilise pour différentes instances de flux de travail. Je pense qu'il y a un modèle mais toujours en train d'enquêter. – Valentin