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

Boxing occurs when hashing a range - 200+ MB over a 90 seconds of normal IDE usage #6052

Open
cartermp opened this issue Dec 23, 2018 · 1 comment

Comments

@cartermp
Copy link
Contributor

cartermp commented Dec 23, 2018

This was noticed in #6047 but not addressed in #6048

Although the range type overrides GetHashCode to call the hash function on two int64s, which specializes to that numeric type as you'd expect, the actual call chain ends up boxing the range type because it calls GenericHashIntrinsic:

https://github.com/Microsoft/visualfsharp/blob/44c7e10ca432d8f245a6d8f8e0ec19ca8c72edaf/src/fsharp/FSharp.Core/prim-types.fs#L1795

Ranges are hashed all of the time in normal IDE usage, including in various routines that will call hash directly or through the use of a distinct or groupBy function.

The net result was a few hundred MB in allocations over ~90 seconds of normal IDE usage.

@cartermp cartermp added this to the 16.0 milestone Dec 23, 2018
@cartermp cartermp changed the title Boxing occurs when hashing a range Boxing occurs when hashing a range - 200+ MB over a 90 seconds of normal IDE usage Dec 24, 2018
@manofstick
Copy link
Contributor

I believe #5307 should resolve this.

It should handle the generic cases (i.e. distinct, groupBy)...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Status: New
Development

No branches or pull requests

4 participants