-
Notifications
You must be signed in to change notification settings - Fork 4.7k
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
Fix lots of uint[] allocation in BigInteger #46895
Conversation
Tagging subscribers to this area: @tannergooding, @pgovind Issue Details
Contributes to #44598 Results from the dotnet/performance perf tests...
|
src/libraries/System.Runtime.Numerics/src/System/Numerics/BigInteger.cs
Outdated
Show resolved
Hide resolved
src/libraries/System.Runtime.Numerics/src/System/Numerics/BigInteger.cs
Outdated
Show resolved
Hide resolved
src/libraries/System.Runtime.Numerics/src/System/Numerics/BigInteger.cs
Outdated
Show resolved
Hide resolved
src/libraries/System.Runtime.Numerics/src/System/Numerics/BigInteger.cs
Outdated
Show resolved
Hide resolved
- Lots of temporary uint[]s are being created and fed into BigInteger's ctor, which then creates a new one. This enables using the input in most cases. - GetPartsForBitManipulation is creating uint[]s for small values, after which it generally gets thrown away. Stop doing that. - Stack allocation can be used for smaller values in many cases.
e604435
to
12823c8
Compare
12823c8
to
6f1e900
Compare
@stephentoub that's interesting, is BigInteger in startup paths somewhere? |
Yes, not the runtime itself, but as part of ASP.NET https development certificate generation on first run. |
Do you have something like an aggregated trace of where time is spent/allocations happen during the various startup paths we care about? I wonder whether it might be interesting to list the top places of interest in #44598 or somewhere to crowd source community interest in optimizing some places like this. |
Contributes to #44598
Contributes to #22609
Results from the dotnet/performance perf tests...