C# 规则引擎的性能如何?

C# 规则引擎的性能如何?,c#,workflow-foundation,rule-engine,nxbre,C#,Workflow Foundation,Rule Engine,Nxbre,我一直在看和,它似乎很有趣,但我不确定它在现实生活中的表现如何 我想到的是一个事实库,有1000万到1亿个事实和规则,比如: Object.Field1000,iProperty(Object.Field2) 我正在使用C#和.NET 编辑:我没有说清楚(完全是我的错):)我有自己的规则评估系统,它使用RETE算法本身。。。它相当快,它可以在大约10秒内评估1000万个事实场景。。。商业解决方案在comaparison中的速度有多快?简单的回答是,一旦规则数量超过某个阈值(我不知道确切值),我希

我一直在看和,它似乎很有趣,但我不确定它在现实生活中的表现如何

我想到的是一个事实库,有1000万到1亿个事实和规则,比如:

Object.Field<5000,Object.Field>1000,iProperty(Object.Field2)

我正在使用C#和.NET


编辑:我没有说清楚(完全是我的错):)我有自己的规则评估系统,它使用RETE算法本身。。。它相当快,它可以在大约10秒内评估1000万个事实场景。。。商业解决方案在comaparison中的速度有多快?

简单的回答是,一旦规则数量超过某个阈值(我不知道确切值),我希望规则引擎的性能会优于命令式解决方案

规则引擎的规则部分是一组条件和操作。单个规则在功能上(几乎)等同于if-then语句。由于引擎的声明性,规则引擎的真正威力是显而易见的

在传统的命令式程序中,必须编写如何计算逻辑的代码。当使用规则引擎时,它确定要计算的语句数量。我只使用过像or这样的引擎,它们使用a来确定应该启动哪些规则。与传统的命令式解决方案相比,规则触发算法的效率将决定规则引擎的执行效率

Rete算法旨在牺牲内存以提高速度。它维护一个将LHS端模式映射到规则的节点网络。您拥有的规则和事实越多,您的rete网络将比您的命令式解决方案表现得更好,因为rete性能理论上独立于系统中的规则数量

你在计划很多事实。如果你计划有很多规则,你可能会遇到内存问题

看看Martin Fowler的文章。这是一个很好的(非常)简短的概述


与Jess&Drools相比,微软业务规则引擎(MS-BRE)的性能有很大提高。提出的几点强调了为什么这些计算很困难。

需要特别注意的一点是,WF规则引擎实际上实现了自己的解析器,因此,它的表达能力有一定的局限性,并且有性能方面的考虑,因为它在运行时几乎是在进行字符串解析,以将规则解释为代码(可执行操作)。

我们在7分钟内通过1500条规则运行了2400万个测试,使用两个JVM在相当普通的服务器上运行。如果您运行每个组合,那么要运行的测试超过360亿个,而且大多数测试都有多种逻辑选择。(例如,您的示例有三种选择。)

传闻这不是一个忠实的rete实现”指的是一个古老的问题,该问题涉及到一个声明,即BizTalk Server附带的业务规则引擎未能正确实现rete算法。顺便说一句,这个说法是不正确的。BRE确实实现了Rete。WF规则引擎是与BRE完全不同的技术。正如Karl所说,WF规则引擎根本没有正确或错误地实现Rete。这是一个可以粗略地称为“顺序”引擎的示例。它实现了一种形式的正向链接。然而,真正的问题要比这复杂一些。“正向”位指的是引擎可以执行的逻辑推理类型。这个术语并没有真正告诉您运行时所涉及的任何机制。真正的问题在于引擎的推理能力有多强。是的,WF可以转发链,是的,它可以推理,但只能以非常有限的方式。Rete引擎提供更强的推理能力,但这实际上与使用Rete算法无关,Rete算法实际上只是对称为“生产”系统的某类规则引擎的优化。这与生产系统在整个“事实库”上推理的方式有关,而顺序WF规则引擎只能在单个事实的粗略等价物上直接推理。问题有时会出现,因为人们混淆了一个特定的运行时机制,该机制支持前向链接和前向链接本身的逻辑过程(毕竟,这是一个相当微妙的区别)。WF中的相关机制当然可以用于在有限的范围内以“向前”的方式进行推理,但其主要用途是允许以半声明的方式表达顺序规则,即,无论这些规则之间的程序依赖性如何,规则都可以以任何顺序表达。这与前向推理或前向链接的逻辑过程无关


这个问题有点复杂,晦涩难懂,我知道在MS的一些人不同意我的观点(我们已经讨论得够多了),但这就是我的看法。

你还必须考虑数据是如何传入你的规则引擎的,就像一旦规则开始被触发,一些规则会调用DB,那么肯定会有性能问题。最佳做法是在一开始就提供规则执行所需的所有数据,尽管这也有一些缺点。

答案不错,但。。。我还没有说清楚(完全是我的错):)我有自己的规则评估系统,使用RETE算法本身。。。它相当快,它可以在大约10秒内评估1000万个事实场景。。。comaparison中的商业解决方案的速度有多快?因此,您想知道您的规则引擎与其他可用的规则引擎相比有多快?基本上,我们正在将其重做到.NET(它是在Delphi上编程的),因为与客户端的合同规定所有操作都必须在.NET中完成。我想知道第三种解决方案是否能像旧方案一样有效