物理メモリの代わりにディスク上の分解を作成します
-
10-10-2019 - |
質問
私は、PDFドキュメントのページを「フラット化」するために使用しているアルゴリズムについてメモリの問題を抱えています。
HBITMAP hbmp = CreateDibSection(...);
ThirdPartyBmpManipulation(hbmp, "C:\\file.pdf", 0); //renders page 0 in file.pdf
void * hdib = ConvertBitmap(hbmp); //copy a Dib Section to a Dib
DeleteObject(hbmp); //frees the HBitmap while the Dib is now in memory
問題は、本当に大きなビットマップがあり、場合によっては、コピーするディブを割り当てる間、HBITMAPをメモリに保持することができないことです。
それで、それはロングショットですが、ディスク上のDIBセクションを何らかの形で割り当てることができますが、それでもHBITMAPを持っていますか? (私のconvertbitmap関数に同じハンドルを使用してください)
解決
障害モードとは何ですか? 「物理メモリ」と言います。Windowsは仮想メモリを使用し、ページからディスクを使用します。パフォーマンスヒットを超えて物理メモリが不足することを心配する必要はありません。住所スペースが不足している場合、ディスクを使用しても役立たない場合があります。
でも、 CreateDIBSection
を取ることができます HANDLE
ファイルマッピングに(で作成されます CreateFileMapping
)。関数と関連するHBITMAP関数の内部が十分に賢い場合、その機能を活用することでアドレス空間を使い果たすことを避けることができるかもしれません。それらが「スマート」である場合、彼らは使用します MapViewOfFile
必要に応じて、ファイルの比較的小さな「Windows」をプロセスのアドレススペースにマッピングします。
所属していません StackOverflow