質問

私は、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」をプロセスのアドレススペースにマッピングします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top