9

如果有的话,将参数作为参数传递给静态方法而不是让该方法是非静态的并通过实例成员访问相同的值是否会更快。假设该方法以只读方式访问这些成员。

在所有其他条件相同的情况下,调用静态方法比调用实例方法稍快。

在所有其他条件相同的情况下,调用不带参数的方法比调用带参数的方法稍快。

考虑:

private Thing _thing;

void DoTheThing()
{
    _thing.DoIt();
}

与此等效代码相比:

private Thing _thing;

// caller's responsibility to pass "_thing"
static void DoTheThing(Thing thing)
{
    thing.DoIt();
}

我想不出这种优化会真正增加任何价值的现实情况,但作为一个思想实验(对于那些喜欢讨论这种事情的人),真的有好处吗?如果是的话有多少参数(什么类型等)以另一种方式平衡?

考虑到这一点,是否还有其他因素?例如,静态方法_thing作为局部变量而不是字段进行访问。

4

3 回答 3

6

我可以想到一个可能的性能优势(对于非虚拟方法):静态方法不需要首先测试引用的无效性(NullReferenceException在适当的情况下抛出 a )。

认为这目前没有任何优势,但这是可能的。不过,我不确定它是否适用于您的特定示例 - 并且很难看出它在您实际想要使用该值的任何情况下如何应用。

于 2009-10-15T16:52:25.797 回答
0

我不确定静态方法和实例方法之间的性能静态。

但是我认为应该在对象设计的基础上决定将其作为静态方法还是实例方法。如果通过调用您的方法,对象的状态没有改变,那么您应该将该方法设为静态方法(类型的方法,而不是类型的特定实例)。

于 2009-10-15T19:00:27.757 回答
0

在您的情况下(我假设代码示例将在 Thing 类中)静态和非静态根本没有速度差异。这来自您的链接:

  • 0.2 0.2 内联静态调用
  • 0.2 0.2 内联这个 inst 调用

因此,将其设为静态以提高速度完全没有意义。

还要考虑到链接页面中提供的值来自 .Net 1.1 并且已经过时了。

于 2009-10-15T16:55:51.053 回答