尝试读取或写入受保护的内存。这通常表明其他内存已经损坏。
我无法贴出代码,因为这个错误似乎会在应用程序的任何随机区域抛出。应用程序会在运行12-48小时后抛出该错误。有时它会停止在一个看似随机的地方并抛出上述错误,其他时候整个应用程序都会停止,并显示一个错误屏幕,上面显示类似于“...中发生了致命错误。这可能是CLR中的一个漏洞或...”之类的信息,还有一些与PInvoke或其他不相关的信息。当这种情况发生时,所有线程都被终止,没有调试信息可用。
简而言之,这就是该应用程序的功能:
这是一个完全用C#编写的多线程服务器应用程序。客户端通过socket连接到服务器。服务器为客户端运行一个虚拟的“环境”,客户端可以在其中相互交互。它消耗相当多的内存,但我没有看到内存泄漏。它通常使用约1.5GB。我认为它没有泄漏,因为内存使用量在应用程序运行期间始终保持相对恒定。即使客户端没有做任何事情,它也会不断运行代码以维护环境。它不使用任何第三方软件或其他API。此应用程序使用的唯一外部资源是socket连接和SQL数据库连接。它在64位服务器上运行。我尝试过在VS2008和VS2010中使用.net 2.0、3.5和4.0进行调试,并在多个服务器上运行,但问题最终仍然会出现。
我尝试关闭编译器优化和几个Microsoft热修复。但是似乎没有任何方法可以解决这个问题。如果有人知道可能的原因或一些识别问题根源的方法,将不胜感激。