Pregunta

Estoy teniendo un problema de memoria con un algoritmo que estoy usando "aplanar" una página en un documento 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

El problema es que tengo un mapa de bits muy grande y en algunos casos no puedo mantener el HBitmap en la memoria mientras se asigno el DIB a copiar a.

Así que es una posibilidad remota, pero de alguna manera me puede asignar la sección DIB en el disco y aún así tener un HBITMAP por ello? (Utilizar la misma asa para mi función ConvertBitmap)

¿Fue útil?

Solución

¿Cuál es el modo de fallo? Usted dice "memoria física": utiliza ventanas de memoria virtual, que será la página en el disco, usted no tiene que preocuparse por quedarse sin memoria física más allá del impacto en el rendimiento. Si estás quedando sin espacio de direcciones, con el disco puede no ser capaz de ayudarle.

Sin embargo, CreateDIBSection puede tomar una HANDLE a una correlación de archivo (creado con CreateFileMapping ). Si las partes internas de las funciones de función y hBitmap relacionados son lo suficientemente inteligente, puede ser posible evitar el agotamiento del espacio de direcciones mediante el aprovechamiento de esa capacidad. Si ellos son "inteligentes" que se utilizan MapViewOfFile para correlacionar relativamente pequeñas "ventanas" del archivo, según sea necesario en el espacio de direcciones de su proceso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top