我正在审核一个相当大的Windows Workflow Foundation .xaml文件。
我发现了几个嵌套的Sequence
活动。
示例:
注意:这是一个简单的例子来帮助说明我的问题。
Main Sequence
Query Data Sequence
Write CSV Sequence
查询数据序列将包含与设置变量和查询数据源相关的活动。
对CSV Sequence
的写入包含与设置变量和编写CSV文件相关的活动。
这两项儿童活动除了用于逻辑组织活动外没有任何其他目的。
我正在审核的.xaml文件非常庞大而且复杂。
是否存在负面影响会影响使用多个嵌套活动构建工作流程?
答案 0 :(得分:4)
是嵌套活动存在严重的性能问题。原因是工作流实例在两个活动中的单个线程上运行。 WF运行时调度使用类似队列的结构在该线程上工作。当活动执行时,它只是使用运行时调度其子活动。由于活动执行阻塞,同步工作,因此它们会阻止运行工作流的线程。
由于活动树导航和AEC克隆,工作流状态机进出深度嵌套状态的转换更加昂贵。 您应尽量避免使用深度嵌套状态。
活动实例状态由工作流运行时通过活动执行上下文(AEC)自动管理。工作流运行时使用AEC来维护活动实例状态,并在需要时运行补偿逻辑。
当需要重新执行某个活动时,将使用创建新的AEC BinaryFormatter类。此操作可以具有性能 对工作流程应用程序的影响,尤其是在AEC的情况下 被克隆是复杂的(例如,当有多个嵌套时 活动)强>
解决方案是使用WorkflowApplication对象以异步方式运行工作流。