2012-04-27 58 views
0

我们有一个在C#.Net 3.5中开发的套接字服务器。每当客户端断开并连接时,我都会看到服务器内存使用量增加。如果没有提供有效凭证,服务器将断开客户端连接。套接字服务器内存不断增加

当客户端尝试使用无效凭证进行连接时,会留出更多内存并且看起来从不放弃。客户正尝试每秒重新连接一次。以下是处理断开连接的代码。只要客户端断开连接并在读取和写入操作时遇到错误,就会调用此代码。

有人可以指导我如何调试/解决这个问题?

+0

您是否在每个客户端使用一个线程?如果你在socket和stream上调用displose/close,你应该没问题?否则,我会建议你看看使用内存分析器。 – weismat 2012-04-30 09:27:57

回答

0

它可能是你正在设置state.workSocket和状态为空,没有他们有机会处置。

+0

是的,通过将其设置为空它永远不会处置 – 2012-04-27 19:02:23

+0

试过,它也没有工作。 – dabididabidi 2012-04-28 18:14:32

+0

我们的套接字服务器是windows服务,它具有定制的性能计数器,它们在套接字服务启动时初始化。服务启动后,它接受客户端连接并使用自定义性能计数器来存储已连接/断开连接的客户端总数,总计byts,总字节数等。我猜是当套接字关闭时,仍然关闭的套接字在性能中被引用计数器,这是造成不断增加的记忆。我试图用性能计数器运行套接字服务,并且我看到内存增加,并且在某个时间后它会下降。 – dabididabidi 2012-05-01 00:58:27

0

你如何测量内存使用情况?

如果机器上没有内存压力,GC将不会经常执行采集。因此,即使内存已被丢弃,任务管理器中显示的内存使用情况也会增加。

您可以尝试添加一些GC.Collect调用来强制GC运行 - 这将显示您是否实际泄漏内存。 (不要将收集电话留在生产版本中)。

MSDN文章:Memory Usage Auditing For .NET Applications