Cache the DTE instance in VSSolution Manager, prefer using IVsSolution to retrieve solution file, solution directory and solution open information #4693
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.
Bug
Fixes: NuGet/Home#11902
Regression? Last working version:
Description
The DTE service is used quite frequently during the solution initialization (about once per project usually).
This service doesn't change and as such it can be cached. This is another part of https://github.com/NuGet/Client.Engineering/issues/1374
This retrieval accounts for 8% of the initialization of a test lab solution.
In addition to caching the DTE service, we'll use IVsSolution over DTE service where appropriate (there's a bunch of usages of DTE remaining. They'll be handled in a future PR).
Note that while we do have a field for the IVsSolution, there's no guarantee that
InitializeAsync
of VSSolutionManager has run by the time the methods that were changed were called, so I just switched it to an async lazy to avoid race conditions.PR Checklist
PR has a meaningful title
PR has a linked issue.
Described changes
Tests
Documentation