Эффективно высвобождать неуправляемые ресурсы после завершения процесса - PullRequest
0 голосов
/ 02 мая 2019

У меня есть несколько процессов (или, точнее, несколько экземпляров процесса), пытающихся (создать или) получить доступ к одному файлу с отображенной памятью.Я использую 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.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...