Worker-e codec izolate la crash
HotPDF poate muta decodarea imaginilor cu risc ridicat DCTDecode, JPXDecode și JBIG2Decode în afara procesului gazdă
Moduri de izolare
cimAutomaticeste implicit și foloseșteHotPDFCodecWorker.execând acesta este disponibil lângă executabilul gazdă; altfel păstrează calea compatibilă în procescimRequiredeșuează în mod închis când worker-ul lipsește, nu poate porni, se blochează, depășește timpul, respinge intrarea sau depășește o limită de ieșirecimDisabledfolosește întotdeauna decodoarele existente în proces
Odată ce un worker disponibil acceptă o cerere, cimAutomatic nu reîncearcă intrarea eșuată sau rău intenționată în procesul gazdă
Granița procesului
Fiecare cerere de decodare rulează într-un proces ascuns nou atribuit unui Windows Job Object cu un singur proces
- Job Object-ul termină worker-ul și orice descendenți încercați când handle-ul său se închide
CodecWorkerMemoryLimitBytesaplică un plafon de memorie comisă per proces și are implicit 512 MiBCodecWorkerTimeoutMillisecondsare implicit 10.000 ms și termină un worker blocat- Intrarea codificată, globalurile JBIG2 opționale și ieșirea BGR24 folosesc o mapare de memorie partajată cu nume aleatoriu și un protocol cu lățime fixă versionat
- Capacitatea ieșirii decodate este mărginită de geometria declarată a imaginii și de
DecodeBudgetBytes - Cererile JPEG de rezoluție scăzută poartă dimensiunile exacte țintă și returnează geometria DCT redusă fără a construi un raster de worker la rezoluție completă
Configuration
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;
Un CodecWorkerExecutable gol se rezolvă la HotPDFCodecWorker.exe lângă aplicația curentă
Telemetry
GetLastCodecWorkerInfo raportează starea, identificatorul procesului, codul de ieșire, milisecundele scurse și o diagnosticare mărginită de partea gazdei
GetLastJPEGReducedDecodeInfo raportează geometria sursei, a imaginii scalate, a ieșirii și a liniilor de scanare după o cerere izolată de JPEG redus
Stări distincte acoperă worker-i indisponibili sau nelansabili, timeout, crash, respingerea decodării, nepotrivirea protocolului și limitele ieșirii decodate
Construire și implementare
build-HotPDF-Codec-Worker.cmd
Comanda de construire emite worker-i separați Win32 și Win64 sub tools\CodecWorker\<platform>\Release; implementați worker-ul care corespunde arhitecturii procesului gazdă