我们有一个c#(3.5框架)套接字服务器,它是一个控制台应用程序,经过大约3000个连接(或更少,它是随机的),我们得到一个未处理的异常,它完全崩溃了应用程序。
我们真的很难找到正在发生的事情,在哪里,我们得到的唯一信息如下,任何人都可以解决问题吗?应该注意的是,一切都包含在try catch {}
中描述: 停止工作
问题签名: 问题事件名称:CLR20r3 问题签名01:qrushrserver.exe 问题签名02:1.0.0.0 问题签名03:4bf56a0c 问题签名04:系统 问题签名05:2.0.0.0 问题签名06:49cc5ec9 问题签名07:2c0b 问题签名08:40 问题签名09:System.Net.Sockets.Socket 操作系统版本:6.0.6002.2.2.0.1296.17 区域设置ID:2057
错误应用程序app_name.exe,版本1.0.0.0,时间戳0x4bf56a0c,错误模块mscorwks.dll,版本2.0.50727.4200,时间戳0x4a9ee32d,异常代码0xc0000005,错误偏移0x00000000001c89ca,进程ID 0x%9,应用程序启动时间0X%10
.NET Runtime版本2.0.50727.4200 - 致命执行引擎错误(000007FEF8E4664E)(80131506)
答案 0 :(得分:1)
您的程序因访问冲突而死亡。虽然没有确凿的证据,但这很可能发生在垃圾收集器或终结器线程运行时。哪个会使例外无法捕捉。
这几乎总是由堆损坏引起的。 非常不太可能是导致损坏的.NET Socket代码,该代码已被数十亿次测试。虽然你给它一个很好的锻炼。更可能的原因是程序使用的某种非托管代码。某种COM服务器,也许你是P / Invoke的东西。它也可能是某种机器的插件,如病毒扫描程序。
找到真正的原因将很困难。从环境开始,在安全模式下启动Windows并提供网络支持。运行SysInternals的AutoRuns实用程序以禁用自动启动的内容。祝你好运,你需要它。
答案 1 :(得分:0)
我猜你使用的是Async方法而不是Begin / End。
当您完成Dispose()
后,您是否在SocketAsyncEventArgs
上致电了{{1}}?我发现,如果你不这样做,并继续分配新的,那么你出于某种原因咀嚼内存,它们似乎没有被收集......我发现这是一个真正的问题,在高处有大量的读/写操作连接数。