请考虑以下PowerShell代码:
PS> [int[]] $numbers = 1..10000
PS> (measure-command { [Linq.Enumerable]::Sum($numbers) }).TotalMilliseconds
28.8624
如果我再简单地重复相同的Measure-Command
调用,它的运行速度会快一个数量级:
PS> (measure-command { [Linq.Enumerable]::Sum($numbers) }).TotalMilliseconds
2.6828
随后的重复变化但在同一范围内:
PS> (measure-command { [Linq.Enumerable]::Sum($numbers) }).TotalMilliseconds
1.504
PS> (measure-command { [Linq.Enumerable]::Sum($numbers) }).TotalMilliseconds
2.0782
PS> (measure-command { [Linq.Enumerable]::Sum($numbers) }).TotalMilliseconds
1.3351
从CLR调用方法有什么样的开销?这只是加载然后缓存程序集或其他东西的时间......?
答案 0 :(得分:1)
答案 1 :(得分:0)
CLR在执行期间根据需要转换MSIL,并将生成的本机代码存储在内存中,以便在该进程的上下文中进行后续调用。
我认为第一次将托管代码转换为本机代码,然后将其缓存在内存中。
点击此链接:https://msdn.microsoft.com/en-us/library/k5532s8a(v=vs.110).aspx