我应该重用工作流程定义吗?

时间:2017-10-09 07:54:56

标签: .net workflow-foundation-4

我们有一个Web应用程序,必须在给定时间内执行数十或数百个工作流程。花了好几个小时后,我们才知道性能瓶颈是工作流程的反序列化(我们将xaml保留在数据库中):

ActivityXamlServices.Load(xamlReader, activityXamlServicesSettings);

因此我们正在考虑缓存工作流(Load方法返回的生成的Activity对象)。这似乎可以提高性能。我能看到的唯一可能的问题是,工作流实例之间将重用活动(来自工作流定义/树)。因此,如果活动在一个实例中更改了状态,则可能会更改另一个正在运行的实例的行为。

注意:工作流变量似乎不会在工作流实例之间共享。

编辑:有类似问题:Workflow 4 runtime compiling。问题所有者似乎已经达到了同样的解决方案"缓存DynamicActivity" (Load方法返回的活动)。

1 个答案:

答案 0 :(得分:1)

是的,你绝对可以重复使用从反序列化的XAML中获取的动态活动对象。您可以根据需要使用它来旋转尽可能多的WorkflowApplication对象。

<强> {编辑}

通过反序列化XAML文档获得的活动对象只是工作流程的蓝图。它不包含任何状态信息,因此可以根据您的意愿重复使用多次(甚至WorkflowApplication实用程序类创建WorkflowInvoker实例。

<强> {EndEdit中}