VirtualLock se agotará la cuota de forma predeterminada, incluso si autoriza al usuario (de forma predeterminada, la configuración de política de seguridad de "Bloquear páginas en la memoria" no tiene entradas (ni siquiera administrador)).
Si configura esto, también deberá configurar "Ajustar las cuotas de memoria para un proceso".
Esta pregunta es un poco ambigua, ¿qué parte del espacio de VM desea evitar que se cancele? ¿Heap/Stack/Module's ...?
En general, una solución que había utilizado en el pasado, es crear una DLL con una gran sección que era LEER + ESCRIBIR, inamovible, también puede marcarla EJECUTAR y COMPARTIR si fuera necesario, pero luego HeapCreate en la sección de ese módulo, lo que me permite usarlo como un montón.
Puede buscar los bits exactos para establecer here, IMAGE_SCN_MEM_NOT_PAGED
parece que haría el truco.
Si realiza el proceso de marcar todos sus módulos y secciones con este bit, el cargador de módulos de Windows no cargará una cuota de usuario articular ni requerirá que se modifiquen las configuraciones de política en cada sistema que implemente su código. Tendrá que codificar en un ajuste especial para proporcionar acceso a los HEAP que cree en estos dll NON_PAGEABLE también.
Es un poco trabajo, pero funcionó bien para mí en el pasado, tenía el requisito adicional de compartir memoria en múltiples procesos, que se basaba en la misma dirección.
Creo que lo más fácil de probar sería deshabilitar por completo el archivo de su página. Pero antes de esto, si usas Vista/2008 + OS, el intercambio que ves puede deberse a la superposición, que podría estar "ajustando" proactivamente tu sistema con la suposición de que en el futuro cercano necesitarás usar una aplicación u otra. Algunas otras tareas sencillas serían detener servicios no utilizados como la búsqueda, que podría indexar grandes cantidades de archivos, también debe ir al "planificador de tareas", que configura las tareas del sistema, de manera predeterminada hay algunas docenas en la mayoría de los sistemas con valores predeterminados acción que transmitirá todos los archivos de descarga del Dr. Watson a la MS, defragmente su unidad y una cantidad de otras operaciones de tipo de memoria posiblemente demasiado intensas.
Puede responder con un poco más de detalle para obtener mejores respuestas ... pero otra sugerencia sería simplemente comprar una unidad de estado sólido grande y usarla exclusivamente para el intercambio, tenga en cuenta que estas se degradan con el tiempo en el rendimiento general un tamaño debido a malas asignaciones de bloques que son comunes con todas las tecnologías SSD existentes.
Recientemente me encontré con un proyecto CodePlex llamado "non-paged clr host", desde su página:
Implementación Desde una perspectiva de implementación, el anfitrión no paginado CLR utiliza la SetProcessWorkingSetSize, SetProcessWorkingSetSizeEx (en Windows Server 2003 y superior) y VirtualLock APIs en ensu re esa memoria asignada por está bloqueada en la memoria física. Tenga en cuenta que el uso de las API anterior nogarantía con absoluta certeza que no se produzcan paginación; en su lugar, minimiza las probabilidades de que ocurra a escenarios muy excepcionales. En algunos pruebas de carga hemos llevado a cabo, incluso cuando el sistema como un todo se hogged por la falta de memoria física, ninguna página se observaron fallas en el proceso de usando el host CLR no paginada.
de Windows mueve páginas de conjuntos de procesos de trabajo en una base accedida menos recientemente. En general, esto ofrece buenos resultados, pero casos de uso específicos pueden requerir control. Antes de hacerlo, lea las notas internas de Windows (para comenzar) para comprender mejor lo que está tratando de hacer. – Richard
En segundo lugar el comentario. En la mayoría de los casos, tratar de superar al administrador de memoria de Windows generará un peor rendimiento. –
Pregunta clave: ¿por qué es esto ("mover parte de la memoria de proceso al archivo de paginación") un problema de todos modos? – Stobor