问题描述
我在公共类中声明在我的ASP.NET Web应用程序中一些全局的方法。
I have few global methods declared in public class in my ASP.NET web application.
我来声明公共类的所有全局方法如下格式的习惯
I have habit of declaring all global methods in public class in following format
public static string MethodName(parameters) { }
我想知道它将如何在性能上来看影响?
I want to know how it would impact on performance point of view?
- 在哪一个更好?静态方法和非静态方法?
- 在它之所以好?
http://bytes.com/topic/c-sharp/answers/231701-static-vs-non-static-function-performance#post947244声明:
由于静态方法是使用锁是线程安全的。该总 在内部做一个Monitor.Enter()和Monitor.exit(),以确保 线程安全的。
在 http://dotnetperls.com/static-method 规定:
静态方法通常更快来调用比调用堆栈 实例方法。有几个原因,在C# 编程语言。实例方法实际使用的'这个' 实例指针作为第一个参数,这样一个实例方法 总是有这种开销。实例方法还实现了与 所述callvirt指令在中间语言,其中规定一个 轻微的开销。请注意,改变你的方法静态 方法是不太可能帮助不大雄心勃勃的业绩目标,但 它可以帮助一点点,可能导致进一步的削减。
我有点糊涂了使用哪一个?
I am little confused which one to use?
推荐答案
您第一个链接状态:
那是因为静态的方法是使用 锁是线程安全的。总是做 内部一Monitor.Enter()和 Monitor.exit(),以保证线程安全
如果添加 [MethodImpl(MethodImplOptions.Synchronized)]
的方法,这种说法成为部分正确。
That is utterly, horribly, abominably wrong.
If you add [MethodImpl(MethodImplOptions.Synchronized)]
to the method, that statement becomes partially true.
添加此属性将导致CLR包装锁(typeof运算(YourClass))
和实例中静态
方法里面的锁的方法(这一点)
。
Adding this attribute will cause the CLR to wrap static
methods inside lock(typeof(YourClass))
and instance methods inside of lock(this)
.
This应尽可能避免的
你的第二个环节是正确的。照片静态方法是有点快于实例方法的,因为他们没有一个这
参数(因此跳过一个的NullReferenceException
从callvirt指令检查)
Your second link is correct.
Static methods are a little bit faster than instance methods, because they don't have a this
parameter (thus skipping a NullReferenceException
check from the callvirt instruction)
这篇关于静态VS实例方法性能C#的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!