Codec Workers מבודדי-התרסקות
HotPDF יכול להעביר פיענוח תמונות בסיכון גבוה של DCTDecode, JPXDecode ו-JBIG2Decode מחוץ לתהליך המארח
מצבי בידוד
cimAutomaticהוא ברירת המחדל ומשתמש ב-HotPDFCodecWorker.exeכשהוא זמין לצד הקובץ ההרצה של המארח, אחרת הוא משמר את הנתיב התואם בתוך-processcimRequiredנסגר בכישלון כשהעובד חסר, לא יכול להפעיל, קורס, חורג מהזמן, דוחה את הקלט או עובר על מגבלת פלטcimDisabledתמיד משתמש בפיענוחים הקיימים בתוך-process
ברגע שעובד זמין מקבל בקשה, cimAutomatic אינו מנסה שוב קלט נכשל או זדוני בתהליך המארח
גבול תהליך
כל בקשת פיענוח רצה בתהליך נסתר טרי המשויך ל-Job Object של Windows לתהליך יחיד
- ה-Job Object מסיים את העובד וכל צאצא נסיוני כשהדלת ל-handle שלו נסגרת
CodecWorkerMemoryLimitBytesמחיל תקרת זיכרון מוקצה לכל תהליך וברירת המחדל שלו היא 512 MiBCodecWorkerTimeoutMillisecondsברירת המחדל שלו היא 10,000 אלפיות שנייה ומסיים עובד תקוע- קלט מקודד, globals אופציונליים של JBIG2 ופלט BGR24 משתמשים במיפוי זיכרון משותף אחד בשם אקראי עם פרוטוקול ברוחב קבוע עם גרסה
- קיבולת הפלט המפוענח חסומה על ידי גיאומטריית תמונה מוצהרת ו-
DecodeBudgetBytes - בקשות JPEG ברזולוציה נמוכה נושאות ממדי יעד מדויקים ומחזירות גיאומטריית reduced-DCT מבלי לבנות raster עובד ברזולוציה מלאה
תצורה
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 מדווח על גיאומטריית מקור, קנה-מידה, פלט ו-scanline אחרי בקשת JPEG מצומצמת מבודדת
סטטוסים נפרדים מכסים עובדים לא זמינים או שאינם ניתנים להפעלה, timeout, התרסקות, דחיית פיענוח, אי-התאמת פרוטוקול ומגבלות פלט מפוענח
בנייה ופריסה
build-HotPDF-Codec-Worker.cmd
פקודת הבנייה פולטת עובדים נפרדים של Win32 ו-Win64 תחת tools\CodecWorker\<platform>\Release; פרוס את העובד התואם לארכיטקטורת תהליך המארח