Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 套接字服务器崩溃,出现未处理的异常_C#_.net_Sockets - Fatal编程技术网

C# 套接字服务器崩溃,出现未处理的异常

C# 套接字服务器崩溃,出现未处理的异常,c#,.net,sockets,C#,.net,Sockets,我们有一个c#(3.5框架)套接字服务器,它是一个控制台应用程序,在大约3000个连接(或更少,这是非常随机的)之后,我们得到一个未处理的异常,该异常使应用程序完全崩溃 我们真的很难弄清楚到底发生了什么,在哪里,我们得到的唯一信息是下面,有人能解释一下吗?应该注意的是,所有内容都包含在try-catch{}中 说明: 停止工作 问题签名: 问题事件名称:CLR20r3 问题签名01:qrushrserver.exe 问题签名02:1.0.0.0 问题签名03:4bf56a0c 问题签名04:系统

我们有一个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运行时版本2.0.50727.4200-致命的执行引擎错误(000007FEF8E4664E)(80131506)

您的程序因访问冲突而死亡。虽然没有确凿的证据,但这很可能发生在垃圾收集器或终结器线程运行时。这将使异常不可跟踪

这几乎总是由堆损坏引起的。不太可能是.NET套接字代码导致了损坏,该代码已经进行了数十亿次测试。尽管你做得很好。更可能的原因是程序使用的某种非托管代码。某种类型的COM服务器,可能需要P/调用某些东西。它也可能是机器的某种附加组件,比如病毒扫描器


找到真正的原因将是困难的。从环保开始,在网络支持下以安全模式启动Windows。运行SysInternals的AutoRuns实用程序来禁用自动启动的东西。祝您好运,您将需要它。

我想您使用的是异步方法,而不是开始/结束


处理完
SocketAsyncEventArgs
后,是否正在调用
Dispose()
?我发现,如果你不这样做,并不断分配新的,然后你咀嚼记忆的某些原因,他们似乎没有收集。。。我发现在大量连接上执行大量读/写操作确实存在问题。

Wow,这似乎是一个严重的崩溃:-)您是否尝试过使用哪个套接字API(同步、开始/结束、异步)?我们没有p/调用任何东西,我们使用的是纯.NET类。我们正在考虑安装mscorwks.dll的.net修补程序。我们需要卸载所有框架,然后重新应用它们。谢谢你的回复,这听起来像是一场噩梦!这不是我的建议,重读我的最后一段。从病毒扫描器开始,它们以挂接插座“保护”机器而臭名昭著。赛门铁克和熊猫有一段特别糟糕的历史。我们的服务器上实际上没有任何病毒扫描程序。这是修补程序,不知道这是否与我们的问题有关:@Rob:没有。该修补程序的修订版本号为63,这是一个修补程序,其编号为42,是.NET 2.0的原始发布版本。你在那台机器上得到的版本是4200,大约在热修复后3年发布。您最好希望它拒绝安装。我们使用的是连接池,因此对它们调用Dispose()对我们来说不是正确的行为,我们只是关闭套接字,然后将其推回到堆栈上。或者我们也应该处理它?您的
SocketAsyncEventArgs
是“每次操作”数据。。。读或写操作完成后,您将如何处理它们?我发现,对于大量连接而言,处理它们并为每个操作创建新的连接比为重用而使用池以及由此产生的池锁争用效率更高。Len,你能不能让我们快速了解一下我们目前正在做的事情。我知道这篇文章有点离题,但由于某些原因,有时我可以尝试几次成功登录,但我找不到问题所在。非常感谢!我看你是基于MSDN样本的;随着时间的推移,我发现这是不可靠的(在经过一段时间的大量连接和大量数据传输后,由于某种原因,性能急剧下降,我没有费心去寻找),所以我去掉了整个聪明的内存管理和缓冲池…事实上,我认为MSDN示例不会出错。显然是错的。好的,我们将剥离管理池,使用更简单的模型。其他一切看起来都对吗?出于某种原因,当使用几个客户端在本地进行测试时,字典中的客户端数量是准确的,但是在具有更多连接的生产环境中,它似乎被大量删除。我们确实有漂移的插座,但如果这一切都归结于此,我会感到惊讶。我想可能需要安装一个计时器来检查已处理的套接字。。