类型反射影响绩效的战略模式?

时间:2010-04-30 08:31:32

标签: c# performance design-patterns reflection

我正在构建图表。图表由链接相互链接的节点组成(事实上我亲爱的)。 为了给每个节点分配给定的行为,我实现了策略模式。

class Node {
    public BaseNodeBehavior Behavior {get; set;}
}

因此,在应用程序的许多部分中,我广泛使用类型反射来了解节点的行为。

if (node.Behavior is NodeDataOutputBehavior)
    workOnOutputNode(node) ....

我的图表可以获得数千个节点。

  • 类型反射对性能有很大影响吗?
  • 我应该使用除策略模式以外的其他内容吗?

我正在使用策略,因为我需要行为继承。例如,基本上,行为可以是Data或Operator,Data行为可以是IO,Const或Intermediate,最后IO行为可以是Input或Output。

因此,如果我使用枚举,我将无法测试节点行为是否为数据类型,我将需要将其测试为[Input,Output,Const或Intermediate]。如果以后我想添加另一种Data类型的行为,我搞砸了,每个数据测试方法都需要更改。

2 个答案:

答案 0 :(得分:2)

if (node.Behavior is NodeDataOutputBehavior) 反射并且非常快。

答案 1 :(得分:0)

将访客模式用于不同的节点行为将删除类型检查。但是,我会这样做以获得更清洁的设计,而不是性能,因为我怀疑会有任何显着的性能差异。

如果节点行为的类型在编译时是静态的,则访问者模式很有效。添加新节点行为时,可以向Visitor接口添加新方法,这意味着编译器会捕获未处理该行为的情况。

使用即席类型检查,您必须手动检查代码,以确定需要为新行为类型添加新处理程序的位置。