C# ProfileOptimization

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 using System.Runtime; class Program { static void Main() { // Profiles directory must exist. // ... "profile" is created. ProfileOptimization.SetProfileRoot("C:\\profiles\\"); ProfileOptimization.StartProfile("profile"); } }

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.
ProfileOptimization results Before: 1074 ms 1078 ms 1076 ms After: 964 ms 962 ms 961 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.

© 2007-2020 Sam Allen. Every person is special and unique. Send bug reports to info@dotnetperls.com.