-
Notifications
You must be signed in to change notification settings - Fork 8.1k
Closed
Labels
Area-Maintainers-Buildspecific to affecting the buildspecific to affecting the buildResolution-FixedThe issue is fixed.The issue is fixed.
Milestone
Description
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.
Metadata
Metadata
Assignees
Labels
Area-Maintainers-Buildspecific to affecting the buildspecific to affecting the buildResolution-FixedThe issue is fixed.The issue is fixed.