Use the ProfileOptimization class. Benchmark profiling, which improves start up speed.
ProfileOptimization. This helps programs start up faster. We call the SetProfileRoot and StartProfile methods at startup. At exit time, a profile file is created. At next startup, this profile is used to compile methods.Optimization
Note: ProfileOptimization requires a computer with at least 2 logical processor cores.
Note 2: If a single-core computer runs a ProfileOptimization program, the methods have no effect. They are silently ignored.
This program reveals the syntax of ProfileOptimization. Please add the System.Runtime with a using-directive. The SetProfileRoot method is called to indicate the folder where profiles are stored.
And: The StartProfile method specifies both the name of the profile file, and that profiling should begin.
Caution: To end profiling, the program must be exited normally—it cannot just be terminated.
C# program that uses ProfileOptimization
static void Main()
// Profiles directory must exist.
// ... "profile" is created.
Discussion. I did not design the ProfileOptimization feature, so I can't describe its implementation in depth. But the general concept is that the profile contains a list of the methods that are required by the program on execution.
Then: When a profiled program starts up, the .NET Framework reads in the profile. It then compiles those methods on a separate thread.
And: This relieves the pause due to JIT-compilation for those needed methods. This reduces startup time.
Stop profiling. One problem I ran into when using ProfileOptimization is that a program must be closed normally for the profile to be written. If you just close a console window, the profile is not written.
Performance. A performance optimization that does not optimize performance is worthless. For small or fast-running programs, ProfileOptimization does not help much. But on certain programs, it is worthwhile.
Actual results. I have a program that requires about 1 second to run. It has about 30,000 lines of C# code. Most of its runtime is disk access and reads. But I enabled ProfileOptimization for a significant benefit.
Results: The program runs approximately 10% faster with a profile than without a profile.
Before: 1074 ms1078 ms1076 ms
After: 964 ms962 ms961 ms
Profiling a program improves startup speed. It works only on computers with multiple processor cores. The feature requires a call to ProfileOptimization.SetProfileRoot and StartProfile. We saw real performance results.