【无标题】

2023-12-20 00:31:22

关于c#:尝试读取或写入受保护的内存。 这通常表明其他内存已损坏

我无法真正发布代码,因为此错误似乎在应用程序的任何随机区域中引发。该应用程序将在引发错误之前的12-48小时内运行。有时它将停止在看似随机的位置并引发上述错误,而有时整个应用程序都停止了,并且屏幕出现错误,提示"在…中存在致命错误"。 CLR中的错误或…"有关PInvoke的信息或其他不相关的信息。发生这种情况时,所有线程均显示已终止,并且没有可用的调试信息。

简而言之,这就是应用程序的作用:

它是一个完全用C#编写的多线程服务器应用程序。客户端通过套接字连接到服务器。服务器为客户端运行一个虚拟的"环境",客户端可以在其中彼此交互并与环境交互。它消耗了大量内存,但我看不到它在泄漏。它通常消耗约1.5GB。我不认为其泄漏是因为在整个应用程序运行期间内存使用率保持相对恒定。即使客户端没有执行任何操作,它仍在不断运行的代码可以维护环境。它不使用任何第三方软件或其他API。该应用程序使用的唯一外部资源是套接字连接和SQL数据库连接。它运行在64位服务器上。我尝试使用.net 2.0、3.5和4.0在VS2008和VS2010中以及在多台服务器上调试此问题,最终仍然会出现问题。

我尝试关闭编译器优化和几个Microsoft修补程序。似乎没有什么可以解决这个问题。如果有人知道任何可能的原因,或某种方式识别导致问题的原因,将不胜感激。

相关讨论
请发布完整的通话堆栈…
.NET故障排除"致命执行引擎错误"的可能重复
大约有一半的时间我无法获得调用堆栈。如果引发致命执行错误,则根本没有调试信息。它实际上确实停止在代码中某处的时间,似乎没有异常。我什至经历了所有活动线程,还没有发现任何可能引起冲突的东西。我认为内存损坏是在引发错误之前发生的。
检查正在使用的糟糕的旧COM和ActiveX组件。我也知道SQLCE在多线程环境中会出现这种情况。
没有COM或ActiveX组件。
我也有这个问题。我使用悖论5.x,.net 3.5和鼠尾草数据对象(COM组件),它随机发生,我找不到它的模式。我认为这只是com组件中的一些闪避代码。
您还可以通过访问被某物锁定的资源来获取它,例如已经打开的Excel文件。将此发布为答案,因为那是我的问题。
令人惊讶的是,这仅发生在我的解决方案中的一个项目中。我的解决方案中有12个项目,但其他所有项目都没有任何问题。我面临这个问题的一个是C#控制台应用程序。为了补充信息,我昨天早上进行了大量未决的Windows 7更新,但是如果这是根本原因,那么它应该已经影响了解决方案中所有项目的启动模式。我正在使用Visual Studio2010。仅在从VS调试项目期间才会发生此问题。它的输出exe从debug文件夹运行良好。
我刚刚在带有MapInfo DLL的VS 2013 .NET 4.5中遇到了此问题。原来,问题是我将构建平台从x86更改为Any CPU,足以触发此错误。把它改回x86就可以了。可能会帮助某人。

相关讨论
您如何用x86改回来的。我只是对这个指令CSingleLock lock(&m_csMember, TRUE);遇到同样的问题。有关更多详细信息,这是我的帖子
在VS 2012/2013中,转到"项目属性"->“构建”,然后将"平台目标"更改为所需的内容。尽管我认为可以在另一个地方进行更改,但是我似乎找不到它,但我认为这两种方法都应达到相同的结果。
我实际上正在使用VS 2013,并将其配置为x86:/
您的问题可能是由很多原因引起的,我很惊讶通过更改构建平台解决了问题。您可以说是个幸运的逃生。
此解决方案结合此答案为我解决了它。
最终在WinDBG和SOS的帮助下进行了跟踪。某些未知的DLL引发访问冲突。原来是一个名为" Nvidia Network Manager"的软件引起了该问题。我已经读过无数次有关防火墙或防病毒引起的问题的信息,而我都没有使用它们,所以我拒绝了这个想法。另外,我还假设它不是环境的,因为它发生在使用不同硬件的多于一台服务器上。原来我测试过的所有机器都运行" NVidia Network Manager"。我相信它会与其余的主板驱动程序一起安装。

希望这对某人有所帮助,因为这个问题困扰了我的应用很长时间。

相关讨论
在我的情况下,当我频繁地从设备读取数据引发异常时,我使用Thread.Sleep(1000)停止了一段时间的读取。和完美的工作。
我以为治愈是"卸载NVidia Network Manager"
投票率最高的答案,不提供任何逻辑答案。
我怀疑我的主板或软件中是否存在与nvidia相关的任何内容。我正在使用Visual Studio2010。仅在从VS调试项目期间才会发生此问题。它的输出exe从debug文件夹运行良好。
我正在访问导致问题的我自己进程的线程。
我在Visual Studio(VS)2010中也遇到了这个问题。更有趣的是,我的解决方案中有多个项目(控制台应用程序,WPF应用程序,Windows窗体应用程序),但是只有在设置"控制台应用程序"类型时它才会失败项目作为解决方案的启动项目(即使对于那些实际上没有代码或项目模板本身附带的默认程序集没有引用的任何其他程序集的程序)。

进行更改最终使我得以解决:转到控制台应用程序项目的项目属性(或者,在解决方案资源管理器中选择项目文件,然后按Alt + Enter组合键)->转到Debug选项卡->滚动到右窗格中的部分->选中Enable unmanaged code debugging复选框,如下面的快照所示->单击工具栏中的Floppy按钮以保存项目属性。我为什么还不知道为什么会发生这种情况的根本原因。我观察到的唯一一件事是,前一天晚上在我的计算机上安装了许多Windows更新,这些更新主要由Office更新和OS更新组成(有十几篇KB文章)。
在这里插入图片描述

更新:VS 2017及更高版本的设置名称已更改,如以下屏幕截图所示:
在这里插入图片描述

从VS 2017开始,此名称已重命名为"启用本机代码调试"
感谢@Chiramisu提供最新信息并为社区提供帮助。 Ive更新了答案,使其适用于Visual Studio的较新版本。

文章来源:https://blog.csdn.net/sd6275832ght/article/details/135084679
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。