我正在开发一个Web应用程序,我创建了一个返回Dataset的方法。 在检查应用程序的性能时,我收到了类似的消息 “不访问实例数据或调用实例方法的方法可以标记为静态。
我不知道为什么我需要这样做。
提前致谢!
答案 0 :(得分:3)
引用MSDN:
“将方法标记为静态后,编译器将向这些成员发出非虚拟调用站点。发送非虚拟调用站点将阻止在运行时检查每个调用,以确保当前对象指针为非对于性能敏感的代码,这可以带来可衡量的性能提升。“
http://msdn.microsoft.com/en-us/library/ms245046.aspx
尽管如此,任何表现差异都可能微不足道(正如其他人所说)。如果您确定只有在拥有对象实例时才会调用该方法,那么将其设置为静态就没有意义。
虽然这不是规则的意图,当我看到这个警告(来自Code Analysis或Resharper)时,我确保它警告我的方法确实属于它。有时,方法不引用类中的任何内容这一事实可以表明它确实不属于该类。
答案 1 :(得分:2)
我不知道为什么我需要这样做。
你不需要,它可能不会产生显着的性能差异,如果有的话。但是,您可能希望考虑无论如何都要这样做。如果这些方法因多态性原因而不是虚拟的,并且它们没有使用任何关于特定实例的内容,那么我会将它们静态化为 show 它们并不真正与任何特定实例绑定
答案 2 :(得分:0)
所有其他相同的非虚拟调用稍微快一点,因此转换为静态方法应该会产生性能提升。但是,静态方法具有根本不同的行为 - 特别是对于多线程代码 - 因此您应该仔细处理。
答案 3 :(得分:0)
你不一定需要这样做。实际上,在我看来,它是非常愚蠢的建议,因为它鼓励你将它标记为static
,而你可能不希望它是静态的!
Static methods
即使没有method
instanciating
,也可以访问object
。
请考虑以下代码段:
Foo _bar = new Foo();
_bar.RandomMethod();// not necessarily static
Foo.RandomMethod();//Foo is the class, and RandomMethod is static.
我的建议是,不要遵循这条消息,只是按照你的设计告诉你:)。
如果您认为require
object
的权利,请勿将其标记为static
。如果您发现其一致而无法method
调用此object
,则标记为static