我正在尝试编写一个 C# 应用程序,该应用程序接收数十万个独立的数据行,并根据用户定义的某些规则设置某个属性。因此,我考虑过使用规则引擎。经过一番谷歌搜索,我决定使用内置的Windows Workflow Foundation Rules Engine。
用于创建规则的界面以管道和过滤器样式呈现给用户:
原始数据 -> 规则 1 -> 如果规则 1 的结果为真,则执行规则 2 / 如果规则 1 的结果为假,则执行规则 3 -> ...执行其他规则的分支 ... -> 取决于所采用的分支,属性设置为某个值。
我希望能够以类似的管道和过滤器/分支样式执行规则,而不是像非链接规则集那样按顺序执行。我不确定如何为链接规则集创建依赖项以匹配我的流程。我意识到 WF 有专门针对这种类型的分支的 IfElse 活动,它支持类似的规则,但工作流活动要慢两个数量级。
我是否错误地使用了这些技术?(我是 C# 新手)我应该考虑编写自己的规则引擎吗?任何建议表示赞赏。
编辑:有关我所做研究的其他详细信息。我搜索并阅读了过去一周我能找到的大多数博客文章/教程/msdn 资源(没有用链接,有很多,而且我使用了明显的关键字)。规则引擎规则集似乎专门用于顺序独立规则,当它们相互依赖时,它们通过更改规则本身的依赖项并导致重新评估这些规则(尽管类似于我相信RETE称为全链)。我看不到一种根据它们的结构和关系动态地将依赖项插入到我的规则中的方法。但是,我可以使用 IfElse 活动对这种控制流进行建模。
我已经实现了一个包含 700 行样本数据的小规则集并运行了一些测试。(在代码中粘贴没有用,我对此没有问题)它们在约 50 毫秒内评估,而使用 IfElse 活动和相同规则构建的等效逻辑在 aprox 中评估。2 秒,我猜这是来自切换活动的开销。我要么没有正确使用这些技术(我的意思是我不知道要在独占分支中分层评估的规则集的属性,或者更快的切换活动),要么没有简单的方法来控制执行流程。规则集,因此我必须对这些活动造成很大的性能损失。在这种情况下,我不妨编写自己的规则引擎。
编辑 2:我需要来自规则集的执行流程图