如果有的话,将参数作为参数传递给静态方法更快,而不是让方法是非静态的,并通过实例成员访问相同的值。假设该方法以只读方式访问这些成员。
所有其他条件相同,调用静态方法slightly faster比调用实例方法。
在所有其他条件相同的情况下,调用不带参数的方法比使用参数调用方法要快一些。
考虑:
private Thing _thing;
void DoTheThing()
{
_thing.DoIt();
}
与此等效代码对比:
private Thing _thing;
// caller's responsibility to pass "_thing"
static void DoTheThing(Thing thing)
{
thing.DoIt();
}
我无法想象这种优化会真正增加任何价值的真实情况,但作为一个思想实验(对于那些喜欢讨论此类事物的人),是否真的有益处,如果是这样,那么有多少参数(什么类型等)以另一种方式提供平衡?
是否会考虑其他因素?例如,静态方法将_thing
作为局部变量而不是字段访问。
答案 0 :(得分:6)
我可以使用可能的性能优势(对于非虚方法):静态方法不需要首先测试null引用(抛出{{1}在适当的情况下)。
我不认为这当前有任何优势,但它可能是一个。我不确定它是否适用于您的特定示例 - 并且很难看出它在任何您实际想要使用值的情况下如何应用。
答案 1 :(得分:0)
在你的情况下(我假设代码示例将在Thing类中)静态和非静态将完全没有速度差异。这来自您的链接:
因此,将速度提升为静态毫无意义。
还要考虑到链接页面中提供的值来自.Net 1.1并且过时了。
答案 2 :(得分:0)
我不确定静态方法和实例方法中的性能静态。
但我相信,无论你是在对象设计的基础上将它作为静态方法还是实例方法,都应该做出决定。如果通过调用您的方法,对象的状态不会被更改,那么您应该将该方法设置为静态方法(类型的方法,而不是类型的特定实例)。