2011-01-02 9 views
8

Estoy buscando implementaciones totalmente administradas de memoria compartida para .NET (P/Invoke es aceptable, mixto C++/CLI no lo es).Implementaciones de .NET de memoria compartida completamente administradas?

+0

y qué pasa con C++/CLI que se compila en MSIL, sin mezclar (por ejemplo, compilar con '/ clr: pure')? –

+1

Compartir la memoria es bastante fácil, pero ¿se da cuenta de que solo se pueden compartir tipos primitivos? (y probablemente los tipos de valores donde todos los miembros son primitivos) –

+0

Otra opción válida sería NamedPipes –

Respuesta

8

Parece que está buscando Memory-Mapped Files, que son compatibles con .NET 4.0 BCL.

A partir de la versión de .NET Framework 4, puede utilizar código administrado para acceder a archivos mapeados en memoria de la misma manera que las funciones nativas de Windows acceder a los archivos mapeados en memoria, como se describe en Administración de archivos asignados en la memoria para Win32 en MSDN Library

+0

Parece que esos y un mutex compartido van a hacer el truco. Después de todo, solo necesito pasar algunos dobles con latencia extremadamente baja en dos procesos para algunos asuntos financieros. Gracias – em70

15

Bueno, el .NET framework es gratuito, recomendado. .NET 4.0 admite las clases de espacio de nombres System.IO.MemoryMappedFiles. La memoria compartida es un desajuste de impedancia bastante drástico con la noción de un recolector de basura, por eso tardó un tiempo. A menos que use punteros, la copia del montón del GC a la vista de MMF es inevitable.

Los otros mecanismos de IPC también usan memoria compartida, simplemente no es explícita ya que está integrada en el kernel. Todo esto funciona aproximadamente a la misma velocidad, un microsegundo para configurar la asignación y luego solo el ancho de banda del bus para hacer la copia de memoria a memoria. Cinco gigabytes por segundo es el más lento que te encontrarás.

+0

Gracias por la información de rendimiento útil, +1 :) – em70

2

This article explica en la sección 3 cómo ajustar MapViewOfFile y sus amigos usando P/Invoke.

Cuestiones relacionadas