Никогда не изменяйте размер буфера в приложении сокета. Это может не иметь значения для приложения с сокетами, где не так много одновременных операций. Но это плохая привычка, к которой легко привыкнуть.
Работа с буфером, большим, чем фактические данные, не так сложна для работы. Просто проверьте все методы Stream. У них есть свойство offset и count, которое указывает, где вы должны начать обработку и сколько байтов вы можете обработать. То же самое и здесь.
И чтобы ответить на ваш вопрос: цена заключается в том, что .NET необходимо выделить новый «слот» памяти, и что память становится более фрагментированной для каждого запроса.
Просто выделите 15-килобайтный буфер напрямую, когда сокет подключен. Создайте пул буферов, если вы можете обрабатывать несколько (асинхронных) приемов для каждого соединения.