Новые асинхронные методы и производительность

Классы сокетов в .NET получили несколько новых асинхронных методов (например, Socket.ReceiveAsync ).

I ' м пытаюсь понять их цель. Насколько я понимаю, они были созданы, чтобы не создавать новый объект IAsyncResult для каждой операции.

Допустим, я должен был создать высокопроизводительный HTTP-сервер. Затем мне нужно создать объект запроса или ответа для каждой операции. И объекты запроса или ответа, безусловно, имеют некоторые свойства, которые тоже могут быть другими классами (или просто примитивами + строка). И мне, возможно, придется получить информацию из базы данных (больше объектов для создания).

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

Пожалуйста, просветите меня.

Обновление

От MSDN о новом Async методы:

Основная особенность этих улучшений - предотвращение повторного выделения и синхронизации объектов во время асинхронного ввода-вывода большого объема. Шаблон проектирования «Начало / конец», реализуемый в настоящее время классом System.Net.Sockets.Socket, требует выделения объекта System.IAsyncResult для каждой операции асинхронного сокета

Источник: http://msdn.microsoft.com/en -us / library / system.net.sockets.socketasynceventargs.aspx

Update2

Этот вопрос не повторяется. Я не спрашиваю о разнице. Я прекрасно понимаю разницу. Если они добавили методы для уменьшения распределения и работы для GC, должен ли я сделать то же самое на уровне моего протокола поверх обработки сокетов? т.е. следует ли мне использовать шаблон flyweight для таких объектов, как HttpReqest и т. д.

6
задан Cœur 12 July 2018 в 14:12
поделиться