循环执行流上的业务规则检查,同时只读取一次流C#

循环执行流上的业务规则检查,同时只读取一次流C#,c#,optimization,stream,biztalk,pipeline,C#,Optimization,Stream,Biztalk,Pipeline,我可能想得太多了 我有一个包含分隔字符串的数据流。我在DB中定义了大量的业务规则,基本上说“如果此位置的值等于[this],则此规则为真”-这要复杂得多,因为这些规则可以分组/否定(如果不是,则为真)。诸如此类 总之,当前状态我将流读入一个字符串,循环遍历每次迭代该字符串的业务规则组,并编译与该字符串匹配的业务规则的arraylist。考虑到这是一个流组件,并且对于每一组新的规则,它都会增加处理时间,因此根本没有效率 我的要求是现在不要实例化一个字符串,在流中读取一次,仍然得到相同的结果(应用的

我可能想得太多了

我有一个包含分隔字符串的数据流。我在DB中定义了大量的业务规则,基本上说“如果此位置的值等于[this],则此规则为真”-这要复杂得多,因为这些规则可以分组/否定(如果不是,则为真)。诸如此类

总之,当前状态我将流读入一个字符串,循环遍历每次迭代该字符串的业务规则组,并编译与该字符串匹配的业务规则的arraylist。考虑到这是一个流组件,并且对于每一组新的规则,它都会增加处理时间,因此根本没有效率

我的要求是现在不要实例化一个字符串,在流中读取一次,仍然得到相同的结果(应用的业务规则ID的数组列表)


这可能吗?不是寻找代码,只是概念。有一些想法,但它们在纸面上听起来并不好。

迭代字符串是您提到的绝对最便宜的操作,让所有规则共享相同的迭代是不实际的。这个要求太疯狂了。你需要做的是:打电话给你的上司,告诉他是谁想出了这种吃脸的妄想想法,并说:“我有一套非常特别的技能……”也许提供建议或用一些代码“不要这样做”会更容易。是否需要改进此流程的性能?如果需要,您希望实现多大程度的改进?对于每种性能改进,都有相同的问题:您是否实际描述了这一点?结果真的表明这是开始改善的最佳方式吗?由于人们在优化之前不进行分析,所以所做的大量无意义的工作总是让我感到惊讶。当前的解决方案是根据业务规则迭代字符串。所以,好吧,假设随着业务规则列表的增长,这是最好的选择,它们将呈指数增长,那么交付和决策之间的延迟也将呈指数增长。话虽如此,我提出了一种更加面向对象的方法,这可能就足够了。为这些业务规则创建对象并缓存这些对象的列表,我将为“实际值”定义一个可为null的属性。在每个文档到达时制作一份深度副本,然后“读取一次”,用该文档的实际值更新每个obj;返回rule listwhere expected val=actual valIs这是BizTalk问题吗?遍历字符串是您提到的绝对最便宜的操作,让所有规则共享同一个迭代是不实际的。这个要求太疯狂了。你需要做的是:打电话给你的上司,告诉他是谁想出了这种吃脸的妄想想法,并说:“我有一套非常特别的技能……”也许提供建议或用一些代码“不要这样做”会更容易。是否需要改进此流程的性能?如果需要,您希望实现多大程度的改进?对于每种性能改进,都有相同的问题:您是否实际描述了这一点?结果真的表明这是开始改善的最佳方式吗?由于人们在优化之前不进行分析,所以所做的大量无意义的工作总是让我感到惊讶。当前的解决方案是根据业务规则迭代字符串。所以,好吧,假设随着业务规则列表的增长,这是最好的选择,它们将呈指数增长,那么交付和决策之间的延迟也将呈指数增长。话虽如此,我提出了一种更加面向对象的方法,这可能就足够了。为这些业务规则创建对象并缓存这些对象的列表,我将为“实际值”定义一个可为null的属性。在每个文档到达时制作一份深度副本,然后“读取一次”,用该文档的实际值更新每个obj;返回规则列表,其中预期值=实际值这是BizTalk问题吗?