У меня есть несколько процессов (или, точнее, несколько экземпляров процесса), пытающихся (создать или) получить доступ к одному файлу с отображенной памятью.Я использую Mutex для синхронизации (первого) создания файла mmap.
Когда все процессы запускаются в первый раз, он работает хорошо и данные читаются правильно.Но если я закрою все процессы (так как они занимают много времени) с помощью «щелчка правой кнопкой мыши -> закрыть все окна» и сразу же снова запущу процессы, я столкнусь с такими проблемами, как System.IO.IOException: труба не работает.Неуправляемые ресурсы не очищаются вовремя.Я использую метод dispose () в конце программы.
MemoryMappedFile mmf;
Mutex mutex = new Mutex(false, mmapName.Substring(2));
mutex.WaitOne();
try
{
mmf = MemoryMappedFile.OpenExisting(mmapName);
}
catch (FileNotFoundException)
{
mmf = MemoryMappedFile.CreateFromFile(rFile, FileMode.Open, mmapName);
}
mutex.ReleaseMutex();
MemoryMappedViewStream fileStream = mmf.CreateViewStream(0, 0,
MemoryMappedFileAccess.Read);
...
Есть ли способ решить эту проблему?ключевое слово "использование" не поможет.Должен ли я использовать SafeHandles?(У меня нет опыта работы с SafeHandles, но уже есть некоторые SafeMemoryMappedFileHandle / SafeMemoryMappedViewHandles.)