Une exception System.AccessViolationException peut-elle se produire en raison d’une RAM défectueuse?

StackOverflow https://stackoverflow.com/questions/1444844

Question

J'ai un site Web sur lequel je travaille depuis environ un an maintenant. Récemment, il a commencé à lancer une exception System.AccessViolationException de temps en temps, principalement sur ma machine de développement, quand j'étais loin de la machine ...

Je n'ai rien changé sur le code serveur depuis des semaines, car je travaille à 100% sur la partie Javascript et cette erreur a commencé à apparaître récemment.

De plus, le code que je fais est géré à 100%. Je ne fais pas d'interopérabilité, n'appelle pas d'étranges DLL, rien. C'est purement VB.Net, donc je ne vois pas comment je pourrais en générer un moi-même ...

Maintenant, j'utilise cette nouvelle machine depuis quelques mois et elle ne fonctionne pas à 100%. Tous les 2 ou 3 jours, je reçois un écran bleu par exemple. Je n'ai pas eu le temps de bien le diagnostiquer, mais je soupçonne que ma puce RAM est peut-être défectueuse.

Est-il possible qu'une RAM défectueuse entraîne une exception AccessViolationException?
Ou ai-je un problème réel sur lequel je devrais me pencher? (en plus de ma RAM)

UPDATE:

Je ne parviens pas vraiment à trouver OU l'erreur se produit réellement.
Je reçois l’exception "non gérée, voulez-vous déboguer?" Dans la boîte de dialogue, et lorsque j'attache le débogueur, j'ai la liste des threads, où se trouvent tous les threads ASP.Net et 3 que je crée moi-même.
Pour ces 3, j'ai une pile d'appels, et ils sont tous arrêtés lors d'un appel Sleep () (ce qui est prévisible).
Pour tous les autres threads, y compris celui sur lequel VS pointe en tant que problème, je n'ai pas de pile d'appels. Je n'ai pas non plus de détails sur l'exception.

Je ne sais donc pas si cela se produit chaque fois au même endroit ou non.

En ce qui concerne memtest, oui, je vais faire quelque chose comme ça, j'espère juste avoir un peu de temps pour le faire bientôt, mais je voulais savoir, entre-temps, si cela pourrait expliquer ce problème.

UPDATE 2:

Trouvé dans le journal des événements ...

Une exception non gérée s'est produite et le processus a été arrêté.

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)

Des idées sur ce qu'il faut en penser?
Merci
Daniel

Était-ce utile?

La solution

Est-il possible qu'une RAM défectueuse entraîne une exception AccessViolationException?

Oui c'est possible. Si la mémoire sous-jacente d'un processus ne se comporte pas de manière prévisible, alors oui, cela pourrait entraîner de nombreux types de défaillances d'application, y compris une exception AccessViolationException.

Est-il probable qu'une RAM défectueuse entraîne une exception AccessViolationException?

Je dirais qu'il est beaucoup plus probable qu'une erreur dans votre programme ou votre bibliothèque que vous appelez soit en cause. Cependant, la première étape consiste à déterminer pourquoi ou plus important encore l'endroit où l'exception AccessViolationException se produit. Essayez de joindre un débogueur, interrompez AccessViolationExceptions et voyez ce qui se passe réellement.

La proposition de Ben S est également judicieuse pour éliminer rapidement le cas de RAM.

Autres conseils

Si vous avez des doutes sur une RAM défectueuse, lancez simplement memtest86 .

Mais si l'erreur se produit toujours lors du même appel, ce n'est probablement pas de la RAM.

Est-ce que cela ne se produit que sur votre machine de développement? Si c'est le cas, un disque dur / RAM défectueux (fichier d'échange) est tout à fait possible. Vous pouvez également souhaiter réinstaller .NET Framework au cas où l’une des bibliothèques (peut-être l’une des DLL Native Image) serait corrompue.

En termes simples:

Si l'erreur se produit à chaque fois dans différentes sections de code, c'est un bon indicateur que quelque chose ne va pas avec votre système dans son ensemble.

D’autre part, si l’erreur se répète dans le même morceau de code, il s’agit presque certainement de ce morceau de code fautif.

Comme indiqué dans une réponse précédente, utilisez Memtest86 + pour vérifier si votre mémoire est bonne ou non.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top