THotPDF.RenderLoadedPagesParallel Method

以有上限的工作者對顯示清單編譯與播放做管線化,同時在輸出陣列中保持輸入順序

宣告

function RenderLoadedPagesParallel(const PageIndices: array of Integer;
    DPI, MaxConcurrency: Integer; out Bitmaps: THPDFBitmapArray): Integer; overload;

function RenderLoadedPagesParallel(const PageIndices: array of Integer;
    DPI, MaxConcurrency: Integer; out Bitmaps: THPDFBitmapArray;
    out Info: THPDFParallelRenderPipelineInfo): Integer; overload;

行為

編譯在顯示清單快取鎖之外執行,因此不相干的頁面可以同時編譯,第一個就緒的頁面也能在完整輸入集合編譯完成前先開始轉譯

排程器會動態平衡編譯與播放工作,把工作者數量上限設為 MaxConcurrency,為每個工作者隔離轉譯器狀態,並透過受保護的引用計數共用快取項目

當 PeakMemorySchedulerEnabled 為 true 時,會以最大的頁面估算值與目前可用的全域預算,從正規化後的請求調降實際工作者數量;之後每個被認領的頁面在編譯與播放期間都持有自己的公平記憶體保留額度

帶 Info 的多載會回報請求與實際工作者數、由記憶體推導的工作者上限、頁面保留額度估算、峰值保留轉譯位元組數、排程器准許數、被延後的頁面、等待時間、編譯與快取命中次數、已完成輸出、各階段峰值並行數、首個結果的延遲、總耗時,以及第一個點陣圖完成時已編譯的頁面數

Bitmaps 中每個非 nil 的點陣圖都由呼叫端擁有

完成後的陣列結果在進行中的保留額度釋放之後仍由呼叫端擁有;若整組輸出本身必須留在排程器預算內,請改用 RenderLoadedPagesParallelOrdered

THPDFParallelRenderPipelineInfo · 顯示清單與印刷生產