Je cherche essentiellement un moyen de passer des instances à travers les programmes/processus sans sérialiser les instances, dans .NET 4.0.Est-il possible de passer un "pointeur" d'instance à un autre processus via un fichier mappé en mémoire?
Oui, je manque mon bon vieux pointeurs dangereux 100%;)
Je pensais que la nouvelle intégration des fichiers mappés en mémoire à 4.0 .NET me aider, après avoir lu quelque part que vous pouvez passer des références/pointeurs "nativement" en l'utilisant.
Cependant, lorsque je tente quelque chose comme
var mmf = MemoryMappedFile.CreateFromFile(@"C:\temp\test.mp", FileMode.Create, "mmf",
1024*1024*300,
MemoryMappedFileAccess.ReadWrite);
var ss = new SimpleStruct();
ss.items = _items; //Collection of Items objects
var FileMapView = mmf.CreateViewAccessor();
FileMapView.Write<SimpleStruct>(0, ref ss); //Exception
Je reçois la ArgumentException suivante:
The specified Type must be a struct containing no references.
Est-il possible de passer des références autour de l'utilisation MMF? Si ce n'est pas le cas, y a-t-il une quelconque pour passer des instances autour des programmes/processus?
Je peux facilement déduire le sens, c'est-à-dire le type de données, du contexte. Cela signifie essentiellement que je saurais comment renvoyer mon pointeur "vide" à son vrai type. Les deux processus partageraient bien entendu un ensemble commun définissant certains types communs. Je suppose que ce que j'aurais aimé voir, c'est la possibilité de * goupiller * les instances gérées, comme vous pouvez le faire avec des types non gérés. –
Il ne peut pas fonctionner par conception. La disposition de la mémoire des objets gérés est indétectable. Le compilateur JIT tire parti de cela en réorganisant les champs d'une structure, par exemple, pour obtenir un alignement correct et une taille totale minimale. Lancer un IntPtr nécessite Marshal.PtrToStructure(). La version gérée de memcpy(). –