Skip to content
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 4 commits into from
Feb 26, 2024
Merged

Make shadow copy logic a bit smarter #72244

merged 4 commits into from
Feb 26, 2024

Conversation

jaredpar
Copy link
Member

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.

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 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 jaredpar marked this pull request as ready for review February 23, 2024 19:39
@jaredpar jaredpar requested a review from a team as a code owner February 23, 2024 19:39
@jaredpar
Copy link
Member Author

@dotnet/roslyn-compiler PTAL

@jaredpar
Copy link
Member Author

@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.

@jaredpar jaredpar requested a review from a team as a code owner February 26, 2024 16:52
@jaredpar jaredpar merged commit 3e56610 into dotnet:main Feb 26, 2024
27 of 30 checks passed
@jaredpar jaredpar deleted the load branch February 26, 2024 23:54
@jjonescz jjonescz added this to the 17.10 P2 milestone Feb 27, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Area-Analyzers untriaged Issues and PRs which have not yet been triaged by a lead
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants