我正在使用FxCop寻找我们的应用程序的改进。我们经常违反的规则之一是“将成员标记为静态”,将其标记为性能规则。
当然,我们有很多类方法不能对任何类成员进行操作,这些方法可能被标记为静态,但实际上是否有性能提升?
我的理解是静态将在执行时被实例化一次。如果永远不会调用该方法,那将是一种浪费。如果多次调用该方法可能会产生一个小的好处。
对于变量,它们是否标记为静态有明显的含义,并且对应用程序的操作如何定义至关重要。对于方法虽然我不相信如果它们没有引用任何实例变量或方法,它们是否被标记为静态有任何功能性影响。
我在这里错过了这一点吗?标准是将所有这些方法标记为静态吗?
答案 0 :(得分:1)
性能变得更好,因为静态方法没有隐藏的“this”指针。
每个实例(非静态)方法都隐藏了“this”指针,该指针被传递给方法以访问实例成员。如果没有使用非静态成员,则“this”指针仍未使用。在堆栈或CPU寄存器中传递附加参数需要一些时间,可以通过将此方法声明为静态来保存。
“我的理解是静态将在执行时实例化一次。”
静态和非静态方法在程序代码中只存在一次。当存在不同的类实例时,仅重复非staic数据成员。非静态类方法使用类引用(隐藏参数)与特定实例一起使用。代码本身永远不会重复。
答案 1 :(得分:0)
正如您所说,当一个方法被标记为静态时,它会在第一次使用时被实例化一次。无论何时进行后续调用,运行时环境都不需要对其进行验证,因为它保证存在。以下是Microsoft的文档:http://msdn.microsoft.com/en-us/library/ms245046%28v=vs.80%29.aspx