dot*_*uts 19 .net c# performance static-methods
我在ASP.NET Web应用程序中的公共类中声明了很少的全局方法.
我习惯以下列格式在公共类中声明所有全局方法
public static string MethodName(parameters) { }
Run Code Online (Sandbox Code Playgroud)
我想知道它会如何影响性能观点?
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#编程语言中有几个原因.实例方法实际上使用'this'实例指针作为第一个参数,因此实例方法将始终具有该开销.实例方法也使用中间语言的callvirt指令实现,这会产生轻微的开销.请注意,将方法更改为静态方法不太可能对雄心勃勃的性能目标有所帮助,但它可以帮助一点点,并可能导致进一步减少.
我很困惑哪一个使用?
SLa*_*aks 43
您的第一个链接指出:
这是因为静态方法使用锁是线程安全的.始终在内部执行Monitor.Enter()和Monitor.exit()以确保线程安全
如果添加[MethodImpl(MethodImplOptions.Synchronized)]
到方法,则该语句将变为部分为真.
添加此属性将导致CLR将static
方法内部lock(typeof(YourClass))
和实例方法包装在其中lock(this)
.
你的第二个链接是正确的.
静态方法比实例方法快一点,因为它们没有this
参数(因此跳过了NullReferenceException
callvirt指令的检查)
归档时间: |
|
查看次数: |
11563 次 |
最近记录: |