异步套接字服务器中的 OutOfMemoryException

詹姆斯·杜萨

我正在编写套接字服务器程序。它将侦听特定的 IP 和端口。一旦数据进来,它就会处理数据并将其存储在数据库中。无论数据是否传入,我都希望我的程序能够 24*7 地收听。如果来则处理它否则等待直到新客户加入

这是示例代码


static async Task AcceptClientsAsync(TcpListener listener, CancellationToken ct) { try { var clientCounter = 0; while (!ct.IsCancellationRequested) { TcpClient client = await listener.AcceptTcpClientAsync().ConfigureAwait(true); clientCounter++; EchoAsync(client, clientCounter, ct); } } catch (Exception e) { NewLog.WriteErrorLogToBuffer("exception in AcceptClientsAsync " + e.InnerException, false); } }

它工作正常,但一段时间后我出现内存不足异常。有没有办法解决这个问题?

费德里科·迪普马

您的TcpClient实例永远不会被释放,因此它们将保持打开状态,直到您的程序内存不足并被操作系统关闭。

TcpClient使用完后需要关闭最好的方法是将它包装在一个using块中:

using(TcpClient client = await listener.AcceptTcpClientAsync().ConfigureAwait(true))
{
    clientCounter++;
    EchoAsync(client, clientCounter, ct);
}

另一种方法是使用其Close()方法手动关闭它,但请注意,如果在调用之前抛出异常,Close()TcpClient将永远保持打开状态。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从存储中读取OutOfMemoryException

在Xamarin中获取OutOfMemoryException

Azure函数中的OutOfMemoryException

仿真器中的OutOfMemoryException

Windows Phone应用中的OutOfMemoryException

IIS System.OutOfMemoryException问题Web服务

Sbt解析器失败,出现OutOfMemoryException

Java - 异步套接字通道无法连接到远程异步服务器套接字通道

Microsoft的异步服务器套接字示例

具有多线程的异步服务器套接字

OutOfMemoryException异常尽管使用WeakHashMap中

OutOfMemoryException异常尽管使用WeakHashMap中

.Net Core中的异步服务器套接字-如何返回结果?

确定异步套接字服务器中客户端的主机名

C#中的异步套接字服务器,通过套接字服务器进行客户端到客户端的通信

使用OutOfMemoryException调用订阅服务器onError()时发生IllegalStateException

服务器从客户端读取消息时,出现OutOfMemoryException

增加最大服务器内存以处理 SQL Server 上的 System.OutOfMemoryException

System.OutOfMemoryException:在angularjs中抛出了类型为“ System.OutOfMemoryException”的异常

简单Scala TCP服务器中的套接字问题

Bash中的简单套接字服务器?

Linux中的正常关机服务器套接字

从HTTP服务器中的套接字读取的推荐方法

UDP套接字未从Go中的服务器读取

Unity中的简单套接字服务器

python中的套接字服务器拒绝连接

C#中的TCP套接字服务器

C ++中的TCP服务器套接字打开失败

Swift 4中通过CFNetwork的套接字服务器