c# - 尝试读取或写入 protected 内存。这通常表明其他内存已损坏

标签 c# .net multithreading memory-management

我希望有人能告诉我可能导致此错误的原因:

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/

相关文章:

c# - 根据表格记录更改标签文本

c# - 我想通过反射得到一个方法

c++ - 将信号 (SIGINT) 传播到 C++11 线程

c# - 使用 Roslyn 删除 C# 中的无关分号 - (替换 w 空琐事)

c# - 如何在没有互操作程序集的情况下将任何文件类型嵌入到 Microsoft Word 中

c# - 在 ASP.NET(C#) 中填充 GridView 时出现问题

c# - 在 .Net、WinForms 中在运行时添加用户控件缩放时出现问题

java - 在 EJB 环境中是否存在类似于 .wait() 和 .notify() 的行为?

c++ - 修改顺序是否有助于 happens-before 关系?

c# - 使用 iTextSharp 将 HTML 转换为 PDF 不支持阿拉伯语