Workflow Foundation中嵌套活动的性能注意事项

时间:2015-02-27 18:37:13

标签: workflow-foundation

我正在审核一个相当大的Windows Workflow Foundation .xaml文件。

我发现了几个嵌套的Sequence活动。

示例:

注意:这是一个简单的例子来帮助说明我的问题。

Main Sequence
  • Query Data Sequence
  • Write CSV Sequence

查询数据序列将包含与设置变量和查询数据源相关的活动。

对CSV Sequence的写入包含与设置变量和编写CSV文件相关的活动。

这两项儿童活动除了用于逻辑组织活动外没有任何其他目的。

我正在审核的.xaml文件非常庞大而且复杂。

是否存在负面影响会影响使用多个嵌套活动构建工作流程?

1 个答案:

答案 0 :(得分:4)

嵌套活动存在严重的性能问题。原因是工作流实例在两个活动中的单个线程上运行。 WF运行时调度使用类似队列的结构在该线程上工作。当活动执行时,它只是使用运行时调度其子活动。由于活动执行阻塞,同步工作,因此它们会阻止运行工作流的线程。

  

由于活动树导航和AEC克隆,工作流状态机进出深度嵌套状态的转换更加昂贵。 您应尽量避免使用深度嵌套状态。

活动实例状态由工作流运行时通过活动执行上下文(AEC)自动管理。工作流运行时使用AEC来维护活动实例状态,并在需要时运行补偿逻辑。

  

当需要重新执行某个活动时,将使用创建新的AEC   BinaryFormatter类。此操作可以具有性能   对工作流程应用程序的影响,尤其是在AEC的情况下   被克隆是复杂的(例如,当有多个嵌套时   活动)

解决方案是使用WorkflowApplication对象以异步方式运行工作流