Cache Platform Negotiation in graph build #9343
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes https://devdiv.visualstudio.com/DevDiv/_workitems/edit/1834963
Context
PR #7699 caused perf regression when running large-graphs-with-platform-negotiation kind of build.
Changes:
msbuild/src/Build/Graph/ProjectInterpretation.cs
Lines 182 to 184 in 867e260
have caused that dependency projects were evaluated for Platform Negotiation purpose (with null global properties) for each incoming dependency.
Changes Made
Caching "evaluation for Platform Negotiation purpose".
Testing
Unit tests.
Local.
Notes
Without changes it was running 6K evaluations (for VS/VC build) and it took 132 s.
After changes only 1.5K evaluations with duration of 33 s.
The fact that every dependency has to be specially evaluated for Platform Negotiation purposes has big enough, IMO, negative impact on performance, to reevaluate this approach.