Spero che qualcuno mi possa illuminare su cosa potrebbe causare questo errore:
Tentativo di leggere o scrivere memoria protetta. Questo è spesso un'indicazione che l'altra memoria è corrotta.
Non riesco davvero a postare il codice perché questo errore sembra essere lanciato in qualsiasi area casuale dell'applicazione. L'applicazione funzionerà ovunque dalle 12 alle 48 ore prima di lanciare l'errore. A volte si interrompe in un punto apparentemente casuale e genera l'errore sopra, altre volte l'intera applicazione si interrompe e viene visualizzato uno schermo con un errore che dice qualcosa sulla falsariga di "Si è verificato un errore fatale in ... Questo potrebbe essere un bug nel CLR o ... "qualcosa su PInvoke o altre informazioni non rilevanti. Quando ciò accade, tutti i thread mostrano terminato e non sono disponibili informazioni di debug.
In breve, questo è ciò che fa l'applicazione:
È un'applicazione server multi-thread scritta interamente in C #. I client si connettono al server tramite socket. Il server esegue un "ambiente" virtuale per i client in cui possono interagire tra loro e l'ambiente. Consuma un bel po 'di memoria ma non vedo perdite. In genere consuma circa 1,5 GB. Non credo che perde perché l'uso della memoria rimane relativamente costante per tutto il tempo in cui l'applicazione è in esecuzione. È un 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 usando .net 2.0, 3.5 e 4.
Ho provato a disattivare le ottimizzazioni del compilatore e diverse hot-fix di Microsoft. Nulla sembra risolvere questo problema. Sarebbe apprezzato se qualcuno conoscesse possibili cause o un modo per identificare ciò che sta causando il problema.