Я изучаю асинхронное программирование сокетов на C # и узнал, что это хорошая идея - повторно использовать байтовые буферы в каком-то пуле, а затем просто проверять один из них при необходимости при получении данных из сокета.
Однако я видел два разных метода создания пула байтовых массивов: один использовал простую систему очередей и просто добавлял / удалял их из очереди по мере необходимости. Если он был запрошен и в очереди больше не осталось, создается новый байтовый массив.
Другой метод, который я видел, использует один большой байтовый массив для всей программы. Идея очереди все еще применима, но вместо этого это очередь целых чисел, которые определяют срез (смещение) байтового массива для использования. Если один запросили, а в очереди больше не осталось, размер массива должен быть изменен.
Какое из них является лучшим решением для хорошо масштабируемого сервера? Мой инстинкт заключается в том, что было бы дешевле использовать много байтовых массивов, потому что я представляю, что изменение размера массива по мере необходимости (даже если мы выделяем его большими кусками) будет довольно дорогостоящим, особенно когда он становится большим. Использование нескольких массивов также кажется более интуитивным - есть ли какое-то преимущество в использовании одного массивного массива, о котором я не думаю?