Restore: improve thread pool starvation fix by disabling asynchronous I/O #2488
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.
Resolve NuGet/Home#7314.
The fix is to disable asynchronous I/O in the
FileSystem
class.Ignoring the previous change, this change improves restore performance under .NET Core 2.1+ by ~70% using .NET Core 2.2 Preview 3 (2.2.100-preview3-009430) and the repro for https://github.com/dotnet/corefx/issues/31914.
useAsync == false
(seconds)All baseline trials ultimately failed with:
None of the trials with the fix failed.
This fix was intended for .NET Core 2.1+ as its HTTP rewrite was the catalyst for this performance regression. However, I tested the same fix with NuGet.exe and found a ~44% improvement in restore performance.
useAsync == false
(seconds)