Может ли System.AccessViolationException возникнуть из-за неисправной оперативной памяти? - PullRequest
3 голосов
/ 18 сентября 2009

У меня есть сайт, над которым я работаю около года. Недавно он время от времени вызывал исключение System.AccessViolationException, в основном на моей машине разработчика, когда я был далеко от машины ...

Я ничего не менял в коде сервера в течение нескольких недель, так как я на 100% работал над Javascript, и эта ошибка начала появляться недавно.

Кроме того, код, который я делаю, управляется на 100%. Я не делаю никаких взаимодействий, вызываю странные библиотеки DLL, ничего. Это чистый VB.Net, так что я не понимаю, как я мог бы генерировать один из них сам ...

Теперь я пользуюсь этой новой машиной пару месяцев, и она не работает на 100% правильно. Например, каждые 2 или 3 дня я получаю синий экран. У меня не было времени, чтобы правильно его диагностировать, но я подозреваю, что у меня неисправный чип ОЗУ.

Возможно ли, что неисправное ОЗУ может привести к исключению AccessViolationException?
Или у меня есть реальная проблема, которую я должен изучить? (помимо моей оперативной памяти)


UPDATE:

Я не могу найти, ГДЕ происходит ошибка, на самом деле.
Я получаю "необработанное исключение, вы хотите отладить?" диалоговое окно, и когда я присоединяю отладчик, у меня есть список потоков, где у меня есть все потоки ASP.Net, и 3 я создаю сам.
Для этих 3 у меня есть стек вызовов, и все они останавливаются при вызове Sleep () (что вполне ожидаемо).
Для всех других потоков, включая тот, на который VS указывает как на проблему, у меня нет стека вызовов. У меня также нет никаких подробностей об исключении вообще.

Так что я не знаю, происходит ли это каждый раз в одном и том же месте.

Что касается memtest, то да, я собираюсь сделать что-то подобное, я просто надеюсь, что у меня будет НЕКОТОРОЕ время, чтобы сделать это в ближайшее время, но в то же время я хотел знать, может ли это объяснить эту проблему.


ОБНОВЛЕНИЕ 2:

Нашел это в журнале событий ...

Произошло необработанное исключение, и процесс был остановлен.

Application ID: DefaultDomain    
Process ID: 6632    
Exception: System.AccessViolationException

Message: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.

StackTrace:    at System.Web.Hosting.UnsafeIISMethods.MgdIndicateCompletion(IntPtr pHandler, RequestNotificationStatus& notificationStatus)
   at System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(IntPtr managedHttpContext, IntPtr nativeRequestContext, IntPtr moduleData, Int32 flags)
   at System.Web.Hosting.PipelineRuntime.ProcessRequestNotification(IntPtr managedHttpContext, IntPtr nativeRequestContext, IntPtr moduleData, Int32 flags)

Есть идеи, что с этим делать?
Спасибо
Daniel

Ответы [ 3 ]

3 голосов
/ 18 сентября 2009

Возможно ли, что неисправное ОЗУ может привести к AccessViolationException?

Да, это возможно. Если базовая память процесса не ведет себя предсказуемо, то да, это может привести к множеству различных типов ошибок приложений, включая AccessViolationException.

Возможно ли, что неисправный ОЗУ приводит к исключению AccessViolationException?

Я бы сказал, что намного более вероятно, что ошибка в вашей программе или библиотеке, которую вы вызываете, является ошибочной. Первый шаг - выяснить, почему или что более важно, где возникает исключение AccessViolationException. Попробуйте подключить отладчик, сломайте AccessViolationExceptions и посмотрите, что на самом деле происходит.

Кроме того, предложение Бена С. является хорошим, чтобы быстро исключить случай с ОЗУ.

2 голосов
/ 18 сентября 2009

Это происходит только на вашем компьютере? Если да, то возможен сбой RAM / жесткого диска (файл подкачки). Вы также можете переустановить .NET Framework в случае повреждения одной из библиотек (возможно, одной из библиотек Native Image).

Проще говоря:

Если ошибка возникает в разных частях кода каждый раз, это хороший показатель того, что что-то не так с вашей системой в целом.

С другой стороны, если ошибка повторяется в одном и том же фрагменте кода, то это почти наверняка тот фрагмент кода, который виноват.

Как отмечалось в предыдущем ответе, используйте Memtest86 +, чтобы убедиться, что у вас хорошая память или нет.

2 голосов
/ 18 сентября 2009

Если у вас есть сомнения по поводу неисправного ОЗУ, просто запустите memtest86 .

Но если ошибка всегда происходит при одном и том же вызове, это, вероятно, не ОЗУ.

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