Allocations: Make IsUnchanged allocation free in the common case #7664
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.
Part of #7439
IsUnchanged allocates a delegate on each call to GetOrAdd. This can be avoided by doing a TryGet before the GetOrAdd for the common case of a cache hit. This change saves 257 MB of allocations.
Before
![image](https://private-user-images.githubusercontent.com/103252490/255817768-0f26a516-f64b-4168-8ad3-717baf4dca53.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg5MzA2MTgsIm5iZiI6MTczODkzMDMxOCwicGF0aCI6Ii8xMDMyNTI0OTAvMjU1ODE3NzY4LTBmMjZhNTE2LWY2NGItNDE2OC04YWQzLTcxN2JhZjRkY2E1My5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA3JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwN1QxMjExNThaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT04NzIwYWNjNzFkNmFkOTMyYzZiMjBmODZhNmE2ZWU0Yzk5Yjc1ZWU3Y2Y5YmE1ZGUzYzhiNDk0MTYxMDUwZGU2JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.wXqp_1mh9sU6nAu026zp1Y7quCnjHYpp-omy5q4H5MA)
After
![image](https://private-user-images.githubusercontent.com/103252490/255817742-c30be05b-2805-4b62-936f-8a14561ef0b4.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg5MzA2MTgsIm5iZiI6MTczODkzMDMxOCwicGF0aCI6Ii8xMDMyNTI0OTAvMjU1ODE3NzQyLWMzMGJlMDViLTI4MDUtNGI2Mi05MzZmLThhMTQ1NjFlZjBiNC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA3JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwN1QxMjExNThaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1lMjQ0ZGYyNDMzNjViYmU2OTRhNWQ3M2IyODg4OTgwNjgzNzU2YTk0ZTg3N2U4ZGU2MTVmM2M4YjcwMTRiZjIyJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.qc0gPL23Got0eTlhOeMMlnxn1f5hHxM5OW4ITQWhiSI)
Before
![image](https://private-user-images.githubusercontent.com/103252490/255818089-202d2180-dc38-42a5-8982-3101f492f3c7.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg5MzA2MTgsIm5iZiI6MTczODkzMDMxOCwicGF0aCI6Ii8xMDMyNTI0OTAvMjU1ODE4MDg5LTIwMmQyMTgwLWRjMzgtNDJhNS04OTgyLTMxMDFmNDkyZjNjNy5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA3JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwN1QxMjExNThaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT01NzlhY2Q3NzVkYjUzNTdkMjQ5ODg4MTExN2JkMjIyZDg4Nzc5M2M0YjE3MmUxYzUyMTkxM2YyYjVhODgyYzM5JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.3kKMeL1asaZz7CVSY0IaH8pAISCE7mYnWwoUvDYYLWo)
After
![image](https://private-user-images.githubusercontent.com/103252490/255818150-99f62dab-bcab-4b82-937b-2655cca373b7.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg5MzA2MTgsIm5iZiI6MTczODkzMDMxOCwicGF0aCI6Ii8xMDMyNTI0OTAvMjU1ODE4MTUwLTk5ZjYyZGFiLWJjYWItNGI4Mi05MzdiLTI2NTVjY2EzNzNiNy5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA3JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwN1QxMjExNThaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT00OTIzMDM5ZjVmYzRhODc3ODMwMzk3YzgxMTVlYzMzMTEwMDAwNDgxZjkxYzA1NWRhNjIwODVjNGM4MjFiYWMxJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.gecqYsezqbfoe7LpG8tmyBGElUXLQhImZrcCe0O-Bhs)