Performance improvement and reduction in memory allocation when dealing with Formatted cells #2674
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.
This PR adds a performance benchmarking and some performance gains and reduction in memory dealing with formatted cells (and cell cloning).
Performance Benchmarking and Testing
Code refactoring.
Focused around some hotpaths dealing with formatted cells. As we use the Sister project ClosedXML.Reports and experience performance issues there. (Note: A lot of time for me is seen in
FormatCell
SetOutsideBorder
, maybe there are some future savings there.The changes primarily aim to reduce memory allocation and tweak performance.
In broad strokes they are:
XLRepositoryBase
to take in aWeakReference<Value>
and reduce calls viaTryGet
,GetEnumerator
also now yields.CollectChildrenRecursively(XLStylizedBase parent)
should be faster than the HashSet, reduces recursion and uses the StackOther
minor style changes - feel free to ignore. (Prefer modern language features, use keyword over type name) etc.
Testing results
Before changes
After changes