Materialize the paged message before interacting with it.
Previously the message would be materialized multiple times:
1 : in call to addMsgCtx
3 or 1 + 3p : in call to pagedLogging
Lower Bound (single page): 3
1 : calculate the number of pages
1 : in call to addPageCtx (calculate the page length)
1 : in call to logOpWithCtx
Upper Bound (p pages): 1 + 3p
1 : calculate the number of pages
1p : msg is materialized every time a page is sliced from the message
1p : in call to addPageCtx (calculate the page length)
1p : in call to logOpWithCtx
Materializing early gives these improvements:
Single page: from 4 times to 1 time
Multiple pages: from 2 + 3p times to 1 time
Removes some by-name parameters that were always called with materialized values.
Simplifies unneeded calls to Show on Int or String values, which doesn't have any particular benefit, particularly if it's inside of a string interpolation anyway.
Materialize the paged message before interacting with it.
Previously the message would be materialized multiple times:
1
: in call toaddMsgCtx
3
or1 + 3p
: in call topagedLogging
3
1
: calculate the number of pages1
: in call toaddPageCtx
(calculate the page length)1
: in call tologOpWithCtx
p
pages):1 + 3p
1
: calculate the number of pages1p
:msg
is materialized every time a page is sliced from the message1p
: in call toaddPageCtx
(calculate the page length)1p
: in call tologOpWithCtx
Materializing early gives these improvements:
4
times to1
time2 + 3p
times to1
timeRemoves some by-name parameters that were always called with materialized values.
Simplifies unneeded calls to
Show
onInt
orString
values, which doesn't have any particular benefit, particularly if it's inside of a string interpolation anyway.