代码之家  ›  专栏  ›  技术社区  ›  Aurelien Ribon

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

  •  0
  • Aurelien Ribon  · 技术社区  · 15 年前

    我正在建立图表。一个图由连接在一起的节点组成(亲爱的)。 为了给每个节点分配一个给定的行为,我实现了策略模式。

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

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

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

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

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

    我使用策略是因为我需要行为继承。例如,基本上,一个行为可以是数据或运算符,一个数据行为可以是io、const或intermediate,最后一个io行为可以是输入或输出。

    因此,如果我使用枚举,我将无法测试节点行为是否为数据类型,我将需要测试它为[输入、输出、常量或中间值]。如果以后我想添加另一种数据类型的行为,我就完了,所有的数据测试方法都需要改变。

    2 回复  |  直到 15 年前
        1
  •  2
  •   Darin Dimitrov    15 年前

    if (node.Behavior is NodeDataOutputBehavior) 反射很快。

        2
  •  0
  •   mdma    15 年前

    对不同的节点行为使用visitor模式将删除类型检查。然而,我这样做是为了得到一个更干净的设计,而不是性能,因为我怀疑会有任何显著的性能差异。

    如果在编译时节点行为的类型是静态的,那么visitor模式工作得很好。当您添加一个新的节点行为时,您将向visitor接口添加一个新方法,这意味着编译器将捕获未处理该行为的情况。

    使用特殊类型检查,您必须手动检查代码,以确定需要在何处为新行为类型添加新处理程序。