Ограниченный кэш object stream

Загруженные cross-reference stream могут индексировать сжатые члены, не удерживая в памяти каждый декодированный контейнер /Type /ObjStm

Лимит байтов и вытеснение

ObjectStreamCacheMaxBytes задаёт бюджет на декодированные контейнеры и по умолчанию равен 64 MiB

Когда вставка переходит бюджет, неактивные контейнеры вытесняются по одному в порядке least recently used, а контейнер, обслуживающий текущий view парсера, остаётся защищённым до закрытия этого view

Поэтому одиночный контейнер больше лимита может находиться в памяти во время своего активного разбора, но удерживаемые байты сразу после этого сходятся к настроенному лимиту

Перезагружаемые члены

Вытеснение сохраняет индексы номеров объектов и валидированные смещения членов

Последующее разрешение члена заново открывает исходный container stream, повторно применяет дешифрование документа и stream filter и разбирает запрошенного члена через уже существующий zero-copy slice view

Выставьте лимит в ноль, чтобы не удерживать декодированные контейнеры между разрешениями членов

Телеметрия

GetLoadedObjectStreamCacheInfo сообщает настроенный лимит, текущие и пиковые декодированные байты, счётчики вытеснений и перезагрузок, попадания и промахи кэша членов и активность zero-copy slice

См. также: ObjectStreamCacheMaxBytes, GetLoadedObjectStreamCacheInfo, Zero-copy срезы object stream