-
Notifications
You must be signed in to change notification settings - Fork 4.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Make shadow copy logic a bit smarter #72244
Merged
Merged
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
The shadow copy infrastructure for analyzer does a defensive shadow copy of an analyzer every time a load was requested. There was no attempt at de-duping these request. That means if the _same_ analyzer is passed to 10 compilations in a build, 10 shadow copies will be made. That is done even though the CLR is only ever going to load the first one. This change mades the shadow copy infrastructure smarter by only creating one shadow copy per MVID. That is a reliable identifier that can be used in these circumstance. This reduced the number of shadow copy events when building Roslyn.sln from 268 to 53. The total number of DLL copies this avoids is much higher because a shadow copy event copies an analyzer and all of its supporting resource assemblies.
dotnet-issue-labeler
bot
added
Area-Analyzers
untriaged
Issues and PRs which have not yet been triaged by a lead
labels
Feb 23, 2024
jaredpar
commented
Feb 23, 2024
src/Compilers/Core/Portable/DiagnosticAnalyzer/ShadowCopyAnalyzerAssemblyLoader.cs
Outdated
Show resolved
Hide resolved
@dotnet/roslyn-compiler PTAL |
@jasonmalinowski more as an FYI since you all use the shadow copy analyzer loader in workspaces. Change should be transparent but just in case you see an issue. |
src/Compilers/Core/Portable/DiagnosticAnalyzer/ShadowCopyAnalyzerAssemblyLoader.cs
Outdated
Show resolved
Hide resolved
jjonescz
approved these changes
Feb 26, 2024
src/Compilers/Core/Portable/DiagnosticAnalyzer/ShadowCopyAnalyzerAssemblyLoader.cs
Outdated
Show resolved
Hide resolved
cston
approved these changes
Feb 26, 2024
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Labels
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.
The shadow copy infrastructure for analyzer does a defensive shadow copy of an analyzer every time a load was requested. There was no attempt at de-duping these request. That means if the same analyzer is passed to 10 compilations in a build, 10 shadow copies will be made. That is done even though the CLR is only ever going to load the first one.
This change mades the shadow copy infrastructure smarter by only creating one shadow copy per MVID. That is a reliable identifier that can be used in these circumstance.
This reduced the number of shadow copy events when building Roslyn.sln from 268 to 53. The total number of DLL copies this avoids is much higher because a shadow copy event copies an analyzer and all of its supporting resource assemblies.