Краткая справка: я понимаю, что HTTPListener использует драйвер ядра http.sys, который якобы делает его отличным исполнителем. Однако при выполнении некоторых тестов производительности между управляемым http-сервером и нативным сервером vc ++ я наблюдаю увеличение примерно на 15 МБ / с на нативной стороне. Тестовая установка - две лабораторные машины, недавно отформатированные с 1-гигабитной сетью. На нативной стороне я вижу около 110 МБ / с, что близко к 100% от суммы «минус», при использовании HTTPListener я вижу ~ 94 МБ / с (максимум 100).
Тесты от яблок к яблокам,
- оба отправляют одинаковую полезную нагрузку (~ 120 МБ)
- Я использую одно и то же управляемое клиентское приложение для тестирования обоих серверов
- Для Managed я отключил Nagle (но тестировал оба способа, результат один и тот же)
- Я запускаю серию тестов и вычисляю пропускную способность. Интересно отметить, что отклонение управляемой стандартизации больше, то есть результаты не такие согласованные по сравнению с нативными.
В целом, я ожидаю, что смогу приблизиться к 110 МБ / с собственного сервера через HTTPListener, 15 МБ / с кажется довольно дорогостоящим.
Вопросы:
1. Есть ли другие оптимизации для управляемого, которые мне не хватает?
2. Каковы некоторые потенциальные узкие места, я посмотрел на HTTPResponseStream через отражатель, похоже, что происходит некоторое маршалинг, но нет явных проблем. На самом деле, при использовании чанкинга он создает такой же массив чанков, что и мой собственный сервер.
Любые идеи приветствуются,