You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When running a very simple scenario like powershell -noprofile -command "echo 1", PowerShell on .Net Core is much slower than Windows PowerShell.
On my machine, in Windows PowerShell, this scenarios is 330ms, on .Net Core, it's 1380ms.
After analyzing the performance, cross-gen will help quite a bit, here are all assemblies with >5ms of JIT time at startup:
Assembly
JitTime msec
Num Methods
IL Size
Native Size
System.Linq.Expressions.dll
236.0
592
40,518
117,732
System.Management.Automation.dll
70.5
59
14,596
42,074
Microsoft.CSharp.dll
64.3
88
14,500
51,248
System.Runtime.Extensions.dll
63.1
181
9,059
41,329
System.Linq.dll
55.6
96
5,873
22,785
System.Private.CoreLib.ni.dll
52.0
139
9,756
21,120
System.Collections.Concurrent.dll
49.0
82
7,752
21,467
System.Collections.dll
43.5
106
6,329
13,983
Newtonsoft.Json.dll
38.2
67
7,552
18,844
System.IO.FileSystem.dll
26.5
75
4,356
12,125
System.Diagnostics.Process.dll
24.5
30
3,144
7,746
System.Threading.Tasks.Parallel.dll
20.2
30
3,466
9,483
System.Security.AccessControl.dll
20.1
45
4,215
10,367
System.Text.Encoding.CodePages.dll
17.5
32
4,034
10,010
System.Private.Uri.dll
12.4
26
4,229
8,563
System.Threading.dll
12.2
9
1,966
5,419
System.Security.Principal.Windows.dll
11.5
26
2,227
6,602
System.Console.dll
9.5
34
1,213
3,840
Microsoft.Win32.Registry.dll
8.2
18
2,045
4,814
System.IO.Pipes.dll
6.0
13
883
2,369
System.Diagnostics.FileVersionInfo.dll
5.3
10
1,011
2,523
System.Collections.Specialized.dll
5.2
13
507
2,263
Note that some of these methods can't be compiled ahead of time, e.g. dynamic methods or some generic methods in System.Management.Automation.dll. Still - if we cross-gen'd most of these, startup would be more similar to Windows PowerShell.
When running a very simple scenario like
powershell -noprofile -command "echo 1", PowerShell on .Net Core is much slower than Windows PowerShell.On my machine, in Windows PowerShell, this scenarios is 330ms, on .Net Core, it's 1380ms.
After analyzing the performance, cross-gen will help quite a bit, here are all assemblies with >5ms of JIT time at startup:
Note that some of these methods can't be compiled ahead of time, e.g. dynamic methods or some generic methods in System.Management.Automation.dll. Still - if we cross-gen'd most of these, startup would be more similar to Windows PowerShell.