Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[Class] Make looking up a System.Type given a native Class instance f…
…aster (#5013) Cache the Class -> System.Type lookup in an array. I could also have used a dictionary, but there are a couple of disadvantages compared to the array approach: * A dictionary would require a lock every time it's read/written to. The array is created at launch, and after that we don't have to care about thread safety because it's safe to do the slow lookup multiple times. * Its memory requirements would be higher with more elements (in particular since we'd not only need to store the Type instance, but also a boolean determining whether it's a user type or not). * It's ~1% slower (probably due to the lock). Numbers ======= Test case: rolfbjarne/TestApp@004283d Fix 1 refers to PR #5009. Fix 2 is this fix. iPad Air 2 ---------- | Configuration | Before | After fix 1 | After fix 2 | Improvement from fix 1 to fix 2 | Cumulative improvement | | ------------------- | ------ | ----------: | -----------: | ------------------------------: | ---------------------: | | Release (link all) | 477 ms | 481 ms | 224 ms | 257 ms (53%) | 253 ms (53%) | | Release (dont link) | 738 ms | 656 ms | 377 ms | 279 ms (43%) | 459 ms (62%) | iPhone X -------- | Configuration | Before | After fix 1 | After fix 2 | Improvement from fix 1 to fix 2 | Cumulative improvement | | ------------------- | ------ | ----------: | -----------: | ------------------------------: | ---------------------: | | Release (link all) | 98 ms | 99 ms | 42 ms | 57 ms (58%) | 56 ms (57%) | | Release (dont link) | 197 ms | 153 ms | 91 ms | 62 ms (41%) | 106 ms (54%) | When linking all assemblies, the type map has 24 entries, and when not linking at all it has 2993 entries. This is part 2 of multiple fixes for #4936.
- Loading branch information
ac87108
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
✅ Jenkins job (on internal Jenkins) succeeded
✅ Build succeeded
✅ API Diff (from stable)
ℹ️ API Diff (from PR only) (please review changes)
✅ Generator Diff (no change)
✅ Test run succeeded