首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在这种情况下,是否值得将SocketAsyncEventArgs池化以供重用?

在这种情况下,是否值得将SocketAsyncEventArgs池化以供重用?
EN

Stack Overflow用户
提问于 2012-11-06 10:27:20
回答 1查看 1K关注 0票数 3

在我的场景中,有许多客户机的tcp套接字从所有套接字连接到server.The服务器ReceiveAsync(),并且当没有错误地调用回调时,解析接收到的数据。如果一个套接字的接收数据是某种类型的消息,则接收回调将通过循环对所有其他套接字执行SendAsync(),然后再次开始执行ReceiveAsync()。因此,对于一个套接字,它有机会在很短的时间内由许多其他接收器的回调调用SendAsync()。我尝试通过waitone信号量同步发送,并在发送IO完成后释放一个信号量,这样我就可以为每个套接字使用一个SAEA obj,但这可能会导致接收方的回调阻塞在发送循环中。因此,我取消了信号量,并为每个套接字的发送方法汇集了一些SAEA对象。然而,我发现一些手机客户端有很大的机会丢失IP连接,并且在几分钟内套接字SendAsync()方法的错误回调将不会被调用promptly.Perhaps,也不会被回收到池中。

另一个问题是,如果我将可重用的SAEA池化,SAES.Buffer会产生内存碎片吗?在池化SAEA之前,是否可以通过调用SAEA.SetBuffer(null,0,0)方法来避免内存问题?

EN

回答 1

Stack Overflow用户

发布于 2019-07-09 23:13:04

为了避免内存碎片,我们使用一个巨大的缓冲区,并将该缓冲区的特定区域分配给每个SAEA。因此,内存使用量在整个时间内保持不变,并连续分配内存。

现在我们使用池化的SAEA,这可能是一个PITA,但它似乎是最受推崇的解决方案(如果你使用SAEA的话)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13243462

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档