Я надеюсь, кто-то может просветить меня о том, что может вызвать эту ошибку:
Попытка чтения или записи защищенной памяти. Это часто свидетельствует о том, что другая память повреждена.
Я не могу опубликовать код, потому что эта ошибка, похоже, попадает в любую случайную область приложения. Приложение будет запускаться от 12 до 48 часов, прежде чем выбросить ошибку. Иногда он останавливается в кажущемся случайном месте и бросает вышеприведенную ошибку, иногда все приложение останавливается, и я получаю экран с ошибкой, которая говорит что-то вроде строки "Была фатальная ошибка в... Это может быть ошибка в CLR или..." что-то о PInvoke или другой не относящейся к делу информации. Когда это происходит, все потоки прекращаются и недоступна информация для отладки.
Вкратце это то, что делает приложение:
Это многопоточное серверное приложение, написанное полностью на С#. Клиенты подключаются к серверу через сокет. Сервер запускает виртуальную "среду" для клиентов, где они могут взаимодействовать друг с другом и с окружающей средой. Он потребляет довольно много памяти, но я не вижу его утечки. Обычно он потребляет около 1,5 ГБ. Я не думаю, что это утечка, потому что использование памяти остается относительно постоянным все время работы приложения. Его постоянно действующий код для поддержания среды, даже если клиенты ничего не делают. Он не использует стороннее программное обеспечение или другие API. Единственными внешними ресурсами, которые использует это приложение, являются соединения сокетов и соединения базы данных SQL. Он работает на 64-битном сервере. Я попытался отладить это в VS2008 и VS2010 с использованием .net 2.0, 3.5 и 4.0 и на нескольких серверах, и проблема все еще в конечном итоге возникает.
Я попытался отключить оптимизацию компилятора и несколько горячих исправлений для Microsoft. Ничто, похоже, не устраняет эту проблему. Было бы хорошо, если кто-нибудь знает какие-либо возможные причины или какой-то способ определить, что вызывает проблему.