Som*_*lse 124 .net c# multithreading memory-management
我希望有人可以告诉我可能导致此错误的原因:
尝试读取或写入受保护的内存.这通常表明其他内存已损坏.
我不能真正发布代码,因为这个错误似乎被抛出应用程序的任何随机区域.应用程序将在抛出错误之前的12-48小时内运行.有时它会在一个看似随机的位置停止并抛出上述错误,其他时候整个应用程序停止并且我得到一个错误的屏幕,上面写着"有一个致命的错误...这可能是一个CLR中的错误或......"关于PInvoke或其他非相关信息的内容.发生这种情况时,所有线程都显示终止,并且没有可用的调试信息.
简而言之,这就是应用程序的作用:
它是一个完全用C#编写的多线程服务器应用程序.客户端通过套接字连接到服务器.服务器为客户端运行虚拟"环境",以便他们可以相互交互并与环境进行交互.它消耗了相当多的内存,但我没有看到它泄漏.它通常消耗大约1.5GB.我认为它没有泄漏,因为内存使用在应用程序运行的整个时间内保持相对稳定.即使客户端没有做任何事情,它也会不断运行代码来维护环境.它不使用第三方软件或其他API.此应用程序使用的唯一外部资源是套接字连接和SQL数据库连接.它运行在64位服务器上.我尝试使用.net 2.0,3.5和4在VS2008和VS2010中进行调试.
我试过关闭编译器优化和几个微软热修复.似乎没有什么能让这个问题消失.如果有人知道任何可能的原因,或某种方式来确定导致问题的原因,将不胜感激.
Ser*_*gey 46
我刚刚在VS 2013 .NET 4.5中使用MapInfo DLL遇到了这个问题.事实证明,问题是我将Build for Build从x86更改为Any CPU,这足以触发此错误.将它改回x86就可以了.可以帮助别人.
Som*_*lse 16
最后在WinDBG和SOS的帮助下跟踪了这一点.某些未知的DLL正在抛出访问冲突.原来一个名为"Nvidia Network Manager"的软件导致了这个问题.我无数次读过这个问题是如何由防火墙或防病毒引起的,我没有使用它,所以我驳回了这个想法.此外,我假设它不是环境因为它发生在使用不同硬件的多个服务器上.原来我测试过的所有机器都在运行"NVidia Network Manager".我相信它与其他主板驱动程序一起安装.
希望这有助于某人,因为这个问题困扰我的应用程序很长一段时间.
RBT*_*RBT 15
我还遇到了Visual Studio 2010的这个问题.更有趣的是,我在我的解决方案中有几个项目(控制台应用程序,WPF应用程序,Windows窗体应用程序),但只有在我设置"控制台应用程序"类型的项目时它才会失败"作为启动项目(即使对于那些没有任何代码或任何额外的程序集,除了项目模板本身附带的默认程序集).
以下更改最终帮助我解决了这个问题:转到控制台应用程序项目的项目属性 - >转到Debug
选项卡 - >转到Enable Debuggers
右窗格中的部分 - >选中Enable unmanaged code debugging
复选框,如下面的快照所示.我为什么还不知道为什么会发生这种情况的根本原因.我观察到的唯一事情就是前一天晚上我的机器上安装了很多Windows更新,这些更新主要由办公室更新和操作系统更新组成(超过十几篇文章).
问题可能是由于项目中的混合构建平台DLL.即您将项目构建到任何CPU,但在已为x86平台构建的项目中有一些DLL.由于32位和64位架构的不同内存映射,这些将导致随机崩溃.如果为一个平台构建了所有DLL,则可以解决问题.
托管代码中不应发生此错误.这可能会解决问题:
转到Visual Studio调试程序以绕过此异常:
Tools menu ->Options -> Debugging -> General -> Uncheck this option "Suppress JIT optimization on module load"
Run Code Online (Sandbox Code Playgroud)
希望它会有所帮助.
在引用StringBuilder
. 我使用了默认构造函数,它显然只分配了 16 个字节。Windows 尝试在缓冲区中放入超过 16 个字节并导致缓冲区溢出。
代替
StringBuilder windowText = new StringBuilder(); // Probable overflow of default capacity (16)
Run Code Online (Sandbox Code Playgroud)
使用更大的容量:
StringBuilder windowText = new StringBuilder(3000);
Run Code Online (Sandbox Code Playgroud)
它可能是硬件。这可能有些复杂……但我会建议您的线程代码在某个地方没有使用适当的锁保护某些集合(例如字典)。
您正在运行什么操作系统和服务包?
小智 5
最近,当我更改项目的开发服务器时,我遇到了这个问题.我在代码行中收到此错误,我在其中声明了一个新的OracleConnection变量.
尝试了很多东西,包括安装修补程序后,我尝试在项目中更改引用Oracle.DataAccess和System.Data.OracleClient并且它工作正常!
将项目移动到新计算机时,我建议您续订该项目中添加的所有引用.
小智 5
我遇到了同样的问题。我的代码是在 AutoCAD 2012 中运行的 .NET dll(AutoCAD 扩展)。我还使用 Oracle.DataAccess,并且我的代码在 ExecuteNonQuery() 期间引发了相同的异常。幸运的是,我通过更改我正在使用的 ODP 的 .net 版本(即 Oracle.DataAccess 的 2.x)解决了这个问题
我遇到了,今天就找到了这个例外的解决方案.当我尝试调试在抽象类上调用虚方法的单元测试(NUnit)时,就会发生这种情况.
问题似乎与.NET 4.5.1安装有关.
我已经下载了.NET 4.5.2并已安装(我的项目仍然引用.NET 4.5.1)并且问题已解决.
解决方案来源:
归档时间: |
|
查看次数: |
289353 次 |
最近记录: |