While we try to discard the $smsg (SearchMsg) objects quickly, they remain referenced via $node (SearchThread::Msg) objects, which are stored forever in $ctx->{mapping} to cull redundant words out of subjects in the thread skeleton.
This significantly cuts memory bloat with large search results with '&x=t'. Now, the search results overhead of SearchThread::Msg and linked objects are stable at around 350K instead of ~7M per response in a rough test (there's more savings to be had in the same areas). Several hundred kilobytes is still huge and a large per-client cost; but it's far better than MEGABYTES per-client. --- lib/PublicInbox/View.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/PublicInbox/View.pm b/lib/PublicInbox/View.pm index bb49c03..416cb4a 100644 --- a/lib/PublicInbox/View.pm +++ b/lib/PublicInbox/View.pm @@ -218,7 +218,7 @@ sub index_entry { $rv .= $subj . "\n"; $rv .= _th_index_lite($mid_raw, \$irt, $id, $ctx); my @tocc; - my $mime = $smsg->{mime}; + my $mime = delete $smsg->{mime}; # critical to memory use my $hdr = $mime->header_obj; my $from = _hdr_names_html($hdr, 'From'); obfuscate_addrs($obfs_ibx, $from) if $obfs_ibx; -- EW -- unsubscribe: meta+unsubscr...@public-inbox.org archive: https://public-inbox.org/meta/