在我的情况下,有许多端端的TCP插座连接到服务器。从所有插座上的服务器reveriveasync(),当调用回调的情况下无错误时,将收到的数据解析。如果一个插座的接收到的数据是某种类型的消息,则接收回调将通过循环发送到所有其他插座,然后再次开始接收。因此,对于一个插座,它有机会致电SendAsync()。在很短的时间内。我试图通过Waitone Smaphore同步发送发送,并在发送IO完成后释放一个信号量,以便我只能为每个插座使用一个SAEA OBJ,但这可能导致接收器在发送循环中的接收器回调块。因此,我取消了信号量,并为每个插座的发送方法汇总了一些SAEA OBJ。但是,我发现一些移动电话客户端有很大的机会丢失IP连接,并且插座sendAsync()方法的错误回调不会迅速调用。也许在几分钟之内,不会将SAEA回收到池中。
另一个问题是,如果我汇集可重复使用的SAEA,SAES.Buffer会成为内存片段吗?我可以通过调用saea.setbuffer(null,0,0)方法来避免记忆问题吗?
为了避免内存碎片,我们使用一个巨型缓冲区,并将此缓冲区的某个区域分配给每个SAEA。因此,内存使用过程中的记忆使用量保持不变,并且内存是连续分配的。
现在,我们使用可以是PITA的合并SAEAS,但它似乎是最受欢迎的解决方案(如果您完全使用SAEAS)