我希望有人能告诉我可能导致此错误的原因:
Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
我真的不能发布代码,因为这个错误似乎会在应用程序的任何随机区域抛出。该应用程序将在抛出错误之前运行 12-48 小时。有时它会停在一个看似随机的位置并抛出上述错误,其他时候整个应用程序停止并且我得到一个错误屏幕,上面写着“There was a fatal error in... This may be a CLR 中的错误或...”有关 PInvoke 的信息或其他不相关的信息。发生这种情况时,所有线程都显示已终止,并且没有可用的调试信息。
简而言之,这就是应用程序的作用:
它是一个完全用 C# 编写的多线程服务器应用程序。客户端通过套接字连接到服务器。服务器为客户端运行虚拟“环境”,客户端可以在其中相互交互并与环境交互。它消耗了相当多的内存,但我没有看到它泄漏。它通常消耗大约 1.5GB。我不认为它会泄漏,因为内存使用在整个应用程序运行期间保持相对恒定。即使客户端没有做任何事情,它也会不断运行代码来维护环境。它不使用第 3 方软件或其他 API。此应用程序使用的唯一外部资源是套接字连接和 SQL 数据库连接。它在 64 位服务器上运行。我已经尝试在 VS2008 和 VS2010 中使用 .net 2.0、3.5 和 4.0 以及在多台服务器上进行调试,但问题最终还是出现了。
我试过关闭编译器优化和几个 Microsoft 热修复程序。似乎没有什么能让这个问题消失。如果有人知道任何可能的原因或某种方法来确定导致问题的原因,我们将不胜感激。
最佳答案
我刚刚在 VS 2013 .NET 4.5 中使用 MapInfo DLL 遇到了这个问题。事实证明,问题是我将构建平台从 x86 更改为任何 CPU,这足以触发此错误。将其改回 x86 就可以了。可能会帮助某人。
关于c# - 尝试读取或写入 protected 内存。这通常表明其他内存已损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4074585/