Избегайте фрагментации памяти в высокопроизводительных серверных сокетах - PullRequest
2 голосов
/ 09 февраля 2012

Я изучал возможность использования новой функции асинхронного сокета в .net 3.5, и мне кажется, что я понимаю концепции использования большого предварительно выделенного пула буферов, чтобы предотвратить фрагментацию памяти и снижение производительности при обработке буферов GC.

Однако, размышляя обо всем этом, я беспокоился о том, как на самом деле я сохраняю данные из буферов, пока не будет получено все сообщение. В настоящее время при каждом получении я добавляю полученные данные к ожидающему объекту сообщения (в некоторых реализациях строитель строк и другой массив байтов).

Безопасны ли эти байтовые массивы, поскольку они никогда не направляются в неуправляемый код? Или существует общий подход, используемый для хранения данных в нескольких приемах, чтобы создать полное сообщение для обработки?

...