feat: fix memory leak in Enforce() #246
Merged
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.
Fix: #243
Description
When the enforce function is called 10,000 times, the memory stays at 3MB for a while before it linearly increases to around 40MB. Using the performance analysis tool built into VS2022, snapshots were taken during the program’s runtime to compare the differences in memory and call counts. Clicking on the snapshot allows you to see which functions were called in the stack and what objects exist.
After repeated comparisons, it was found that after the number of calls to GetExprtkFunction increased, many smart pointer objects were created and not released in time, causing the memory to continue to rise. I modified the function’s running logic, using an object pool to store the required objects and returning objects as needed. After completion, the memory occupied by the same number of calls dropped to 4~5MB.
Screenshots/Testimonials
before:
now: