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