ゼロコピーオブジェクトストリームスライス

リンク解決が圧縮された /Type /ObjStm メンバーを初めて具体化するとき、パーサーは重複した部分文字列と 2 番目のストリームコピーではなく、共有デコンプレス済みコンテナバッファ上のゼロコピースライスビューを読み取るようになりました。そのため、多数のメンバーを持つ大きなドキュメントは、オブジェクトごとの二重コピーのコストを支払わなくなります

THPDFObjectStreamSliceStream

(ソース、オフセット、長さ) 上の公開読み取り専用の TStream ビューです。これはソース AnsiString を参照で保持するため、コンテナバイトをコピーせずに生存させることができます。メンバーのバイトを正確に提供し、仮想的な末尾 LF を 1 つ追加して、パーサーが従来のコピーが生成したレイアウトを観察できるようにし、スライス開始前のシークでは例外を発生させる代わりにクランプして、TMemoryStream の寛容さに一致させます

THPDFObjectStreamCacheInfo

2 つの新しい診断がゼロコピーパスを報告します。SliceViewCount はパーサーに渡されたメンバービューの数をカウントし、SliceViewBytes はそれらがカバーしたメンバーバイトを合計します。これは GetLoadedObjectStreamCacheInfo が返す既存のコンテナ、インデックス作成、ヒット、ミス、およびキャッシュ済みバイトカウンタに隣接しています