我们有一个用 C#.Net 3.5 开发的套接字服务器。每当客户端断开连接并连接时,我都会看到服务器内存使用量增加。如果未提供有效凭据,服务器将断开客户端连接。
当客户端尝试使用无效凭据连接时,会保留更多内存并且似乎永远不会放弃。客户端每秒尝试重新连接一次。下面是处理断开连接的代码。每当客户端断开连接并且遇到读写操作错误时,都会调用此代码。
有人可以指导我如何调试/解决这个问题吗?
我们有一个用 C#.Net 3.5 开发的套接字服务器。每当客户端断开连接并连接时,我都会看到服务器内存使用量增加。如果未提供有效凭据,服务器将断开客户端连接。
当客户端尝试使用无效凭据连接时,会保留更多内存并且似乎永远不会放弃。客户端每秒尝试重新连接一次。下面是处理断开连接的代码。每当客户端断开连接并且遇到读写操作错误时,都会调用此代码。
有人可以指导我如何调试/解决这个问题吗?
可能是您将 state.workSocket 和 state 设置为 null,而他们没有机会处理。
您如何测量内存使用情况?
如果机器上没有内存压力,GC 将不会经常执行收集。因此,即使已释放内存,任务管理器中显示的内存使用量也会上升。
您可以尝试添加一些GC.Collect
调用来强制 GC 运行 - 这将显示您是否真的在泄漏内存。(不要在您的生产构建中留下收集呼叫)。
MSDN 文章:.NET 应用程序的内存使用审计