Domanda

Ho un sito Web su cui lavoro da circa un anno. Di recente, ha iniziato a lanciare System.AccessViolationException di tanto in tanto, nella mia macchina di sviluppo, soprattutto quando ero lontano dalla macchina ...

Non cambio nulla sul codice del server da settimane, poiché ho lavorato al 100% sulla parte Javascript e questo errore ha iniziato a comparire di recente.

Inoltre, il codice che sto facendo è gestito al 100%. Non sto facendo alcuna interoperabilità, non chiamo strane DLL, niente. È puro VB.Net, quindi non vedo come potrei generare uno di questi da solo ...

Ora uso questa nuova macchina da un paio di mesi e non funziona correttamente al 100%. Ogni 2 o 3 giorni ricevo ad esempio una schermata blu. Non ho avuto il tempo di diagnosticare correttamente, ma sospetto di avere un chip RAM difettoso.

È possibile che una RAM difettosa possa portare a AccessViolationException?
O ho un problema reale che dovrei esaminare? (oltre alla mia RAM)


UPDATE:

Non riesco davvero a trovare DOVE si verifica l'errore, davvero.
Ottengo l'eccezione "non gestita", vuoi eseguire il debug? & Quot; finestra di dialogo e quando allego il debugger, ho l'elenco dei thread, dove ho tutti i thread ASP.Net e 3 creo me stesso.
Per questi 3 ho un Call Stack, e sono tutti fermati in una chiamata Sleep () (che è prevedibile).
Per tutti gli altri thread, incluso quello che VS indica come il problema, non ho Call Stack. Inoltre non ho dettagli sull'eccezione di sorta.

Quindi non so se succede sempre nello stesso posto o meno.

Per quanto riguarda il memtest, sì, ho intenzione di fare qualcosa del genere, spero solo di avere ALCUNO tempo per farlo presto, ma nel frattempo volevo sapere se questo potesse spiegare questo problema.


AGGIORNAMENTO 2:

Trovato questo nel registro eventi ...

Si è verificata un'eccezione non gestita e il processo è stato terminato.

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)

Qualche idea su cosa farne?
grazie
Daniel

È stato utile?

Soluzione

È possibile che una RAM difettosa possa portare a AccessViolationException?

Sì, questo è possibile. Se la memoria sottostante di un processo non si comporta in modo prevedibile, sì, potrebbe causare molti tipi diversi di errori dell'applicazione, inclusa AccessViolationException.

È probabile che una RAM difettosa stia portando a AccessViolationException?

Direi che è molto più probabile che sia un errore nel tuo programma o libreria che chiami. Il primo passo è scoprire perché o, soprattutto, dove si sta verificando AccessViolationException. Prova ad allegare un debugger, interrompi AccessViolationExceptions e vedi cosa sta realmente accadendo.

Anche il suggerimento di Ben S è buono per escludere rapidamente il caso RAM.

Altri suggerimenti

In caso di dubbi sulla RAM difettosa, eseguire memtest86 .

Ma se l'errore si verifica sempre nella stessa chiamata, probabilmente non è RAM.

Questo succede solo sulla tua macchina di sviluppo? Se sì, allora RAM / disco rigido difettosi (file di paging) è molto possibile. È inoltre possibile reinstallare .NET Framework nel caso in cui una delle librerie (forse una delle DLL di immagini native) sia danneggiata.

In poche parole:

Se l'errore si verifica ogni volta in diverse sezioni di codice, questo è un buon indicatore che qualcosa non va nel tuo sistema nel suo insieme.

D'altra parte, se l'errore si verifica ripetutamente nello stesso pezzo di codice, allora è quasi certamente quel pezzo di codice che è in errore.

Come notato in una risposta precedente, utilizzare Memtest86 + per confermare che la memoria è buona o meno.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top