Размер буфера получения сокета C # - PullRequest
1 голос
/ 12 сентября 2011

Я получаю некоторые данные через сокет (с некоторыми начальными и конечными символами).Я могу использовать механизм приема байтов, который должен получать по одному байту за раз, добавлять его в какую-то очередь и получать следующий, пока не будет найден конечный символ.Или я могу сделать получатель чанка и найти конечный символ для завершения моего сообщения ...

Мой вопрос: какова стоимость увеличения / уменьшения размера буфера ??по моему мнению, уменьшение размера буфера должно увеличить объем памяти ввода-вывода, но подтверждает ли увеличение размера буфера, что я также увеличу производительность ввода-вывода?

1 Ответ

3 голосов
/ 12 сентября 2011

Никогда не изменяйте размер буфера в приложении сокета. Это может не иметь значения для приложения с сокетами, где не так много одновременных операций. Но это плохая привычка, к которой легко привыкнуть.

Работа с буфером, большим, чем фактические данные, не так сложна для работы. Просто проверьте все методы Stream. У них есть свойство offset и count, которое указывает, где вы должны начать обработку и сколько байтов вы можете обработать. То же самое и здесь.

И чтобы ответить на ваш вопрос: цена заключается в том, что .NET необходимо выделить новый «слот» памяти, и что память становится более фрагментированной для каждого запроса.

Просто выделите 15-килобайтный буфер напрямую, когда сокет подключен. Создайте пул буферов, если вы можете обрабатывать несколько (асинхронных) приемов для каждого соединения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...