我希望有人能启发我有关可能导致此错误的原因:
尝试读取或写入受保护的内存。这通常表明其他内存已损坏。
我无法真正发布代码,因为此错误似乎在应用程序的任何随机区域中引发。该应用程序将在引发错误之前的12-48小时内运行。有时它将停止在看似随机的位置并引发上述错误,而有时整个应用程序都停止了,并且屏幕出现错误,提示“在…中存在致命错误”。 CLR中的错误或…”有关PInvoke的信息或其他不相关的信息。发生这种情况时,所有线程均显示已终止,并且没有可用的调试信息。
简而言之,这就是应用程序的作用:
它是一个完全用C#编写的多线程服务器应用程序。客户端通过套接字连接到服务器。服务器为客户端运行一个虚拟的“环境”,客户端可以在其中彼此交互并与环境交互。它消耗了大量内存,但我看不到它在泄漏。它通常消耗约1.5GB。我不认为其泄漏是因为在整个应用程序运行期间内存使用率保持相对恒定。即使客户端没有执行任何操作,它仍在不断运行的代码可以维护环境。它不使用任何第三方软件或其他API。该应用程序使用的唯一外部资源是套接字连接和SQL数据库连接。它运行在64位服务器上。我已经尝试使用.net 2.0、3.5和4在VS2008和VS2010中对此进行调试。
我尝试关闭编译器优化和几个Microsoft修补程序。似乎没有什么可以解决这个问题。如果有人知道任何可能的原因,或某种方式识别导致问题的原因,将不胜感激。
最终在WinDBG和SOS的帮助下进行了跟踪。某些未知的DLL引发访问冲突。原来是一个名为“ Nvidia Network Manager”的软件引起了该问题。我已经读过无数次有关防火墙或防病毒如何导致此问题的信息,而我都没有使用它们,所以我拒绝了这个想法。另外,我还假设它不是环境的,因为它发生在使用不同硬件的多于一台服务器上。原来我测试过的所有机器都运行“ NVidia Network Manager”。我相信它会与其余的主板驱动程序一起安装。
希望这对某人有所帮助,因为这个问题困扰了我很长时间的应用程序。