Potrzebuję uzyskać dostęp do pliku mapy pamięci współużytkowanej (utworzonego i posiadanego przez oddzielny program); W tym celu używamZachowaj MemoryMappedFile Alive po usunięciu
_map = MemoryMappedFile.OpenExisting(
"buffer",
MemoryMappedFileRights.ReadWrite,
HandleInheritability.None);
_mapAccessor = _map.CreateViewAccessor(0, 0, MemoryMappedFileAccess.ReadWrite);
Kiedy zamknąć aplikację nazywam wyrzucać na nich:
public void Dispose()
{
if (_mapAccessor != null)
_mapAccessor.Dispose();
if (_map != null)
_map.Dispose();
}
ale wydaje się, że coś robię tu zabija się plik mapa pamięci, ponieważ inny program, który używa tego, zaczyna otrzymywać chronione błędy pamięci.
Jeśli usuwam plik _map
, to faktycznie niszczy plik zmapowany w pamięci, mimo że nie jest odziedziczonym właścicielem?
Aktualizacja
Okazuje się, że inny program, a nie pod moją kontrolą, robił niegrzeczne rzeczy po tym jak zasygnalizował, że aby przejść do trybu gotowości (bezpośrednio przed wyrzuceniem mapę pamięci).
Podczas używania "MemoryMappedFile.OpenExisting" z "HandleInheritability.None" plik mapy pamięci nie zostanie zniszczony po utylizacji.
Nie, unieszkodliwienie pliku MemoryMappedFile, wywoływanego przez 'OpenExisting()' nie * nie * spowoduje zniszczenia podstawowego FRP. Proces, który nazywał interfejs API Windows 'CreateFileMapping()' steruje czasem życia MMF i 'OpenExisting()' wywołuje 'OpenFileMapping()'. –
Lepiej skup się na zawartości mmf i wymaganych obiektach synchronizacji, które umożliwiają dostęp do sejfu mmf. Wydaje się, że nie ma takiej synchronizacji w miejscu, to dość duża Red Flag btw. –
Masz rację Hans, to nie była mapa pamięci, która była problemem, to był po prostu inny program (nie mój) robienie niegrzecznych rzeczy z kierowcą, po tym, jak zasygnalizowałem przejście w tryb jałowy. –