Open
Description
@kevinohara80 if you're interested, I can create a PR for your review.
We have run into performance issues with getHandlerName. Apparently executing String.valueOf(this) can take a long time to execute if the concrete handler class has a lot of data stored as properties (i.e. storing newList and newMap as properties on your handler class). We have reason to believe this has become more of an issue since Summer 22, but I have no hard evidence on that.
The best solution for us was to replace usage of handlerName Strings with Types throughout the framework. When using types
- you get the benefits of compile-time errors
- you optimize the performance of the framework
- the performance does not vary by use case
- you eliminate the possibility of throwing a heap exception, which can occur when the property data is too large to convert into a string.
Here are my test results.
Using Types
Arrangement: handler with property = 200 sobjects, each with a 100k char description
Call: handler.getHandlerType() 1000 times
Result Timings: 238ms, 221ms, 194ms, 191ms
Using Strings
Arrangement: handler with property = 200 sobjects, each with a 100k char description field
Action: handler.getHandlerName() 1000 times
Result: System.LimitException: Apex heap size too large: 48042718
Arrangement: handler with property = 200 sobjects, each with a 10k char description
Call: handler.getHandlerName() 1000 times
Result Timings: 6379ms, 6323ms, 6135ms, 6268ms, 10994ms, 10628ms, 6232ms
Metadata
Assignees
Labels
No labels