-
Notifications
You must be signed in to change notification settings - Fork 24
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
Performance improvements and new operators #118
base: master
Are you sure you want to change the base?
Conversation
…Reader (AList.toASet, AList.toASetIndexed, AList.ofASet)
…something fails, it must be something very broken where recovering is not possible anyway
….OfSeq with has two overloads and this is not supported
added C# extension AdaptiveHashSet.ToAdaptiveHashMapIgnoreDuplicates overload with getKey (AMap.ofASetMappedIgnoreDuplicates)
using global.json
…tensions [FSharp] added ASet.toAMapIgnoreDuplicates
Looks good, can in break any existing code? |
I did not intend to introduce any breaking changes, but due to the amount of changes, I would be more careful and want to run more tests in other projects. It would also be nice if you could put this to the test in one of your applications. I also just checked out two older versions of my program and ran some benchmarks. Some benchmarks test certain operators explicitly (or almost), but most include a more complex application logic:
More optimization on the application side (e.g. no longer using Ag), difference of FSharp.Data.Adaptive expected to be more significant:
Latest application version using all new adaptive operators and other optimizations:
|
I have implemented some improvements and new specialized operators. They should not expose any breaking changes. Here are the preliminary release notes:
Benchmarks in my application showed that reducing the GC load (by using value options/tuples and struct enumerators) results in a noticeable performance improvement (5-10%). It also needs to be considered that benchmarks are typically quite isolated and do not represent typical system loads. In real environments, there might be much more concurrent activity and the CPU cache and GC might be more busy. In those cases, I expect an even bigger impact.
I will create a preview release package next. Please review the changes and drop your comments below ;-)
Further notes: