Tentativo di leggere o scrivere memoria protetta. Questo è spesso un’indicazione che un’altra memoria è corrotta

Spero che qualcuno possa illuminarmi su cosa potrebbe causare questo errore:

Tentativo di leggere o scrivere memoria protetta. Questo è spesso un’indicazione che un’altra memoria è corrotta.

Non riesco davvero a postare codice perché questo errore sembra essere stato gettato in qualsiasi area casuale dell’applicazione. L’applicazione verrà eseguita ovunque tra 12-48 ore prima di generare l’errore. A volte si fermerà in un punto apparentemente casuale e genererà l’errore sopra riportato, altre volte l’intera applicazione si interromperà e visualizzerò uno schermo con un errore che dice qualcosa sulla falsariga di “C’è stato un errore fatale in … Questo potrebbe essere un errore bug nel CLR o … “qualcosa su PInvoke o altre informazioni non pertinenti. Quando ciò accade, tutti i thread vengono terminati e non sono disponibili informazioni di debug.

In poche parole, questo è ciò che fa l’applicazione:

È un’applicazione server multi-threaded scritta interamente in C #. I client si connettono al server tramite socket. Il server esegue un “ambiente” virtuale per i clienti in cui possono interagire tra loro e con l’ambiente. Consuma un bel po ‘di memoria, ma non vedo perdite. Normalmente consuma circa 1,5 GB. Non penso che perdi perché l’utilizzo della memoria rimane relativamente costante per tutto il tempo in cui l’applicazione è in esecuzione. Il suo codice costantemente in esecuzione per mantenere l’ambiente anche se i client non stanno facendo nulla. Non utilizza software di terze parti o altre API. Le uniche risorse esterne utilizzate da questa applicazione sono le connessioni socket e le connessioni al database SQL. Funziona su un server a 64 bit. Ho provato a eseguire il debug di questo in VS2008 e VS2010 utilizzando .net 2.0, 3.5 e 4.0 e su più server e il problema si verifica ancora alla fine.

Ho provato a distriggersre le ottimizzazioni del compilatore e diverse correzioni rapide microsoft. Nulla sembra rendere questo problema andare via. Sarebbe gradito se qualcuno conoscesse qualche ansible causa, o un qualche tipo di modo per identificare che cosa causa il problema.