共有MemoryMappedFilesから地理データを(主に)読み取る2つの.NET4.0WinFormsアプリケーションがあります。エンドユーザーは、どちらかのアプリを自由に起動したり、両方を同時に実行したりできます。最初に開かれたアプリは名前付きのMemoryMapFile-sを作成し、2番目のアプリは既存のアプリを開きます。ただし、既存の名前付きMemoryMappedFileを開くのは信頼できないようです。ケースの約80%で機能しますが、FileNotFoundExceptionで失敗するケースの約20%です。症状は安全に再現することはできません。失敗したときと成功したときは幸運のようです。
MemoryMappedFilesを取得するために両方のアプリで使用されるコードは次のとおりです。
private static MemoryMappedFile GetMemoryMappedFile(string filePath)
{
string mapName = filePath; // I have also tried here @"Global\myfile", no difference
MemoryMappedFile mmf = null;
try
{
// When the first app executes this step, it always succeeds.
// When the second app comes here, it fails as it should.
mmf = MemoryMappedFile.CreateFromFile(filePath, FileMode.OpenOrCreate,
mapName, HundredMB, MemoryMappedFileAccess.ReadWrite);
}
catch (IOException)
{
try
{
// Opening the already existing named MemoryMappedFile by the SECOND app.
// This line fails about 20% of the time.
mmf = MemoryMappedFile.OpenExisting(mapName,
MemoryMappedFileRights.ReadWrite);
}
catch (FileNotFoundException ex)
{
Console.WriteLine("Yet again, could not open MMF. Life sux.");
}
}
return mmf;
}