クラッシュ分離コーデックワーカー
HotPDF は、リスクの高い DCTDecode、JPXDecode、JBIG2Decode 画像デコードをホストプロセスの外に移動できます
分離モード
cimAutomaticはデフォルトで、ホスト実行ファイルの横にあるHotPDFCodecWorker.exeが利用可能な場合にそれを使用し、それ以外の場合は互換性のあるプロセス内パスを維持しますcimRequiredは、ワーカーが欠落、起動不可、クラッシュ、タイムアウト、入力拒否、または出力制限超過の場合に閉方向に失敗しますcimDisabledは常に既存のプロセス内デコーダを使用します
利用可能なワーカーがリクエストを受け入れると、cimAutomatic は失敗した、または悪意のある入力をホストプロセスで再試行しません
プロセス境界
各デコードリクエストは、シングルプロセス Windows Job Object に割り当てられた新しい非表示プロセスで実行されます
- Job Object は、そのハンドルが閉じるとワーカーと試行された子孫を終了します
CodecWorkerMemoryLimitBytesはプロセスごとのコミット済みメモリ上限を適用し、デフォルトは 512 MiB ですCodecWorkerTimeoutMillisecondsはデフォルトで 10,000 ms で、ハングしたワーカーを終了します- エンコード済み入力、任意の JBIG2 グローバル、BGR24 出力は、バージョン付き固定幅プロトコルを持つ 1 つのランダム名の共有メモリマッピングを使用します
- デコード済み出力容量は、宣言された画像ジオメトリと
DecodeBudgetBytesによって制限されます - 低解像度 JPEG リクエストは正確なターゲット寸法を運び、フル解像度のワーカーラスタを構築せずに縮小 DCT ジオメトリを返します
構成
PDF.CodecIsolationMode := cimRequired;
PDF.CodecWorkerExecutable :=
'C:\Program Files\MyApp\HotPDFCodecWorker.exe';
PDF.CodecWorkerTimeoutMilliseconds := 5000;
PDF.CodecWorkerMemoryLimitBytes := 256 * 1024 * 1024;
Bitmap := PDF.ExtractLoadedImage(0);
if Bitmap = nil then
begin
PDF.GetLastCodecWorkerInfo(Info);
Writeln(Ord(Info.Status), ': ', Info.ErrorMessage);
end;
空の CodecWorkerExecutable は、現在のアプリケーションの横にある HotPDFCodecWorker.exe に解決されます
テレメトリ
GetLastCodecWorkerInfo は、ステータス、プロセス識別子、終了コード、経過ミリ秒、境界付きホスト側診断を報告します
GetLastJPEGReducedDecodeInfo は、分離された縮小 JPEG リクエストの後、ソース、スケーリング、出力、スキャンラインのジオメトリを報告します
個別のステータスは、利用不可または起動不可のワーカー、タイムアウト、クラッシュ、デコード拒否、プロトコル不一致、デコード出力制限をカバーします
ビルドとデプロイ
build-HotPDF-Codec-Worker.cmd
ビルドコマンドは、tools\CodecWorker\<platform>\Release の下に別々の Win32 および Win64 ワーカーを出力します。ホストプロセスアーキテクチャに一致するワーカーをデプロイしてください