Izolowane od awarii procesy CODEC-ów
HotPDF może przenieść dekodowanie obrazów wysokiego ryzyka DCTDecode, JPXDecode i JBIG2Decode poza proces nadrzędny
Tryby izolacji
cimAutomaticjest trybem domyślnym i używaHotPDFCodecWorker.exe, gdy jest on dostępny obok wykonywalnego pliku nadrzędnego; w przeciwnym razie zachowuje zgodną ścieżkę wewnątrzprocesowącimRequiredusuwa się bezpiecznie, gdy proces roboczy brakuje, nie można go uruchomić, ulega awarii, przekracza limit czasu, odrzuca dane wejściowe lub przekracza limit wyjściowycimDisabledzawsze używa istniejących dekoderów wewnątrzprocesowych
Gdy dostępny proces roboczy przyjmie żądanie, cimAutomatic nie ponawia nieudanych ani złośliwych danych wejściowych w procesie nadrzędnym
Granica procesu
Każde żądanie dekodowania przebiega w świeżym ukrytym procesie przypisanym do jednoprocesowego obiektu Job systemu Windows
- Obiekt Job kończy proces roboczy i wszelkie próbujące pojawić się procesy pochodne, gdy jego uchwyt zostanie zamknięty
CodecWorkerMemoryLimitBytesstosuje procesowy limit pamięci zatwierdzonej i domyślnie wynosi 512 MiBCodecWorkerTimeoutMillisecondsdomyślnie wynosi 10 000 ms i kończy zawieszony proces roboczy- Zakodowane dane wejściowe, opcjonalne globalne dane JBIG2 i wynik BGR24 używają jednego losowo nazwanego mapowania pamięci współdzielonej z wersjonowanym protokołem o stałej szerokości pól
- Pojemność wyników dekodowania jest ograniczona przez zadeklarowaną geometrię obrazu i
DecodeBudgetBytes - Niskorozdzielczościowe żądania JPEG niosą dokładne wymiary docelowe i zwracają geometrię DCT o zmniejszonej rozdzielczości bez budowania pełnej rozdzielczości rastra procesu roboczego
Konfiguracja
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;
Pusty CodecWorkerExecutable zostaje rozpoznany jako HotPDFCodecWorker.exe obok bieżącej aplikacji
Telemetria
GetLastCodecWorkerInfo raportuje status, identyfikator procesu, kod zakończenia, upływające milisekundy i ograniczoną diagnostykę po stronie nadrzędnej
GetLastJPEGReducedDecodeInfo raportuje geometrię źródła, skalowania, wyniku i linii skanowania po izolowanym żądaniu zredukowanego JPEG
Odrębne statusy obejmują procesy robocze niedostępne lub niemożliwe do uruchomienia, limit czasu, awarię, odrzucenie dekodowania, niezgodność protokołu i limity wyników dekodowania
Budowanie i wdrażanie
build-HotPDF-Codec-Worker.cmd
Polecenie budowania wytwarza osobne procesy robocze Win32 i Win64 w katalogu tools\CodecWorker\<platform>\Release; wdrażaj proces roboczy zgodny z architekturą procesu nadrzędnego