c++ - El método de IPC más rápido en Windows 7
boost (1)
ReadProcessMemory
ni siquiera debe aparecer como un método IPC; sí, se puede usar como tal, pero existe principalmente para fines de depuración (si se marca su referencia, está bajo la categoría "Funciones de depuración"), y seguramente es más lenta que la memoria compartida "real" porque copia la memoria de un procesar en el búfer especificado, mientras que la memoria compartida real no tiene esta sobrecarga.
La lista completa de los métodos de IPC compatibles con Windows está disponible en MSDN ; aún así, si solo tiene dos aplicaciones que desean compartir un bloque de memoria, debe crear un archivo con nombre mapeado en memoria (respaldado por el archivo de paginación) con MapViewOfFile
/ MapViewOfFile
, que debería ser el método más sencillo y rápido. Los detalles de la asignación de archivos se describen en su página en MSDN.
Las clases relevantes de Boost IPC pueden actuar como un envoltorio delgado alrededor de la memoria compartida, AFAIK solo encapsula las llamadas a las API relevantes específicas del sistema, pero al final se obtiene el puntero habitual al bloque de memoria compartida, por lo que la operación debe ser tan rápida como usar las API nativas.
Debido a esto, le aconsejo que use Boost.Interprocess , ya que es portátil, amigable con C ++ (proporciona semántica RAII) y no le da ninguna penalización de rendimiento después de que se haya creado el bloque de memoria compartida ( puede proporcionar funcionalidades adicionales en la memoria compartida) , pero todos son opt-in; si solo quieres memoria compartida, obtienes eso).
¿Cuál es el método de comunicación interproceso (IPC) más rápido posible en Windows 7? Nos gustaría compartir solo bloques de memoria (bidireccionales).
¿Es ReadProcessMemory
o algo más? Nos gustaría utilizar la C
sencilla pero, por ejemplo, ¿qué usa la biblioteca de Boost para IPC?