日期:2014-05-17  浏览次数:20816 次

来人讨论下,关于多线程内频繁使用匿名方法和ParameterizedThreadStart委托的损耗问题
使用多线程去循环调用某一方法,线程小勇的方法里面需要传递参数
刚刚看了下 Thread提供的参数传递方法  是一个Object类型的委托
现在问题就是 我那时一个循环,如果依靠 那个object类型委托的话,每次都需要频繁的装箱拆箱
还有一种方式就是 在方法内部直接申明,匿名方法,这样的好处就是可以直接调用主方法里面的参数,不需要去考虑传参的问题,不过我不知道匿名方法的频繁使用会不会造成性能和内存方面的损耗,这种损耗和装箱拆箱比起来怎么样
顺便问一句,有没有C#使用的能够测试某一方法性能或者损耗的工具?

------解决方案--------------------
引用
现在问题就是 我那时一个循环

是循环调用线程吗?
如果那样我觉得用匿名方法的损耗更大,每次创建匿名方法的时候都需要分配资源,这就好比在循环中new对象一样。
------解决方案--------------------
"还有一种方式就是 在方法内部直接申明,匿名方法,这样的好处就是可以直接调用主方法里面的参数,不需要去考虑传参的问题,不过我不知道匿名方法的频繁使用会不会造成性能和内存方面的损耗,这种损耗和装箱拆箱比起来怎么样
顺便问一句,"
从C#编译器的角度来看,匿名方法都会被编译器转化为Delegate。

有没有C#使用的能够测试某一方法性能或者损耗的工具? "
Find Application Bottlenecks with Visual Studio Profiler
http://msdn.microsoft.com/en-us/magazine/cc337887.aspx
------解决方案--------------------
用多线程循环调用一个方法?不太清楚,这是什么情况
------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

"还有一种方式就是 在方法内部直接申明,匿名方法,这样的好处就是可以直接调用主方法里面的参数,不需要去考虑传参的问题,不过我不知道匿名方法的频繁使用会不会造成性能和内存方面的损耗,这种损耗和装箱拆箱比起来怎么样
顺便问一句,"
从C#编译器的角度来看,匿名方法都会被编译器转化为Delegate。

有没有C#使用的能够测试某一方法性能或者损耗的工具? "
Find Application Bottlenecks with Visual Studio Profiler
http://msdn.microsoft.com/en-us/magazine/cc337887.aspx


谢啦,微软的那款自带的性能分析的那个还是挺好用的

你上面说的那个装箱拆箱的问题,如果你用了匿名方法调用,从C#编译器的角度来考虑,你觉得你真的可以避免掉装箱拆箱吗?这才是问题的重点。

上面说法更正一下,确实是避免了装箱拆箱,不过他在编译的时候创建了另外一个类,造成了额外的GC,所以性能好坏,要测了才知道。
http://blogs.msdn.com/b/oldnewthing/archive/2006/08/02/686456.aspx