Компилятор может создать таблицы переходов когда это применимо. Например, при использовании отражателя для рассмотрения произведенного кода, Вы будете видеть, что для огромных переключателей на строках, компилятор на самом деле генерирует код, который использует хэш-таблицу для диспетчеризации их. Хэш-таблица использует строки в качестве ключей и делегатов в case
коды как значения.
Это имеет асимптотическое лучшее время выполнения, чем много цепочечных if
тесты и на самом деле быстрее даже для относительно немногих строк.
Трудно сказать, что может пойти не так. Поскольку на веб-сайте MSDN еще нет документации, лучше всего установить FILEMON из SysInternals и посмотреть, почему это происходит.
Как вариант, вы можете подключить к процессу собственный отладчик (например, WinDBG) и поставить точку останова на MapViewOfFile и других перегрузках. А потом узнайте, почему этот вызов не работает.
Использование .CreateViewStream () из экземпляра MemoryMappedFile удалило ошибку из моего кода. Мне не удалось заставить .CreateViewAcccessor () работать с ошибкой отказа в доступе
Я знаю, что это старый вопрос, но я столкнулся с той же ошибкой и смог ее решить.
Несмотря на то, что я, как и вы, открывал MemoryMappedFile как доступный только для чтения (MemoryMappedFileRights.Read), мне также нужно было создать средство доступа только для чтения:
var view = mmf.CreateViewAccessor(offset, size, MemoryMappedFileAccess.Read);
Затем это сработало. Надеюсь, это поможет кому-то другому.