【发布时间】:2021-11-24 14:11:24
【问题描述】:
我正在编写一个服务器应用程序。它接受数以千计的传入 socket 连接,每个连接都发送和接收消息。
每次通过socket接收或发送消息时,我习惯分配新的byte[]缓冲区,那么它们就是垃圾收集:
byte[] receivingBuffer = new byte[bufferSize];
为了提高性能,我想重用 byte[] 缓冲区。我应该使用 ArrayPool 还是 MemoryPool?
或者我应该创建一个 ObjectPool 的固定长度字节 [] 缓冲区?例如,如果我发送和接收的消息从未超过 100 KB,那么我创建一个 100 KB 字节[] 缓冲区的 ObjectPool。每次我需要发送或接收消息时,我都会获得其中一个缓冲区。
【问题讨论】:
-
"每次通过套接字接收或发送消息时,我都需要分配新的 byte[] 缓冲区,然后它们被垃圾回收:" 不,你不需要 - 你搞错了你真正“需要”做什么。
-
你是对的——我“曾经”这样做过——我知道这是不对的——这就是为什么我想改用正确的方式。你会告诉我正确的方法吗?
标签: sockets memory-pool arraypools