2010-12-15 14 views
9

Szybkie tło: Rozumiem, że HTTPListener używa sterownika jądra http.sys, który podobno czyni go doskonałym wykonawcą. Jednak podczas wykonywania testów wydajności między zarządzanym serwerem http a rodzimym serwerem vC++ obserwuję wzrost o około 15 MB/s po stronie natywnej. Konfiguracja testowa to dwie maszyny laboratoryjne świeżo sformatowane z 1 gb nics. Po stronie natywnej widzę około 110 MB/s, które jest bliskie 100% nic minus narzutu, gdy używam HTTPListener widzę ~ 94 MB/s (max 100).HTTPListener vs Wydajność natywnego HTTP

Testy są jabłka do jabłek,

  • zarówno wysłać ten sam ładunek (~ 120 MB)
  • Używam tej samej aplikacji klienta zarządzanego przetestować oba serwery
  • zarządzanych mam wyłączone Nagle (Ale testowane w obie strony, wynik jest taki sam)
  • Przeprowadzam serię testów i obliczam przepustowość, interesującą notatką jest to, że zarządzana odchyłka std jest wyższa, tj. Wyniki nie są tak konsekwentne w porównaniu do natywnego.

Ogólnie oczekuję, że będę w stanie zbliżyć się do 110 MB/s macierzystego serwera przez HTTPListener, 15 MB/s wydaje się dość kosztowne.

Pytania: 1. Czy istnieją inne optymalizacje dla zarządzanych, których mi brakuje? 2. Jakie są potencjalne wąskie gardła, patrzyłem na HTTPResponseStream za pośrednictwem reflektora, wygląda na to, że jest jakiś marshaling, ale nie ma rażących problemów. W rzeczywistości podczas korzystania z chunkingu tworzy identyczną tablicę fragmentów jak mój macierzysty serwer.

Wszelkie pomysły są doceniane,

+0

Z jakich API zbudowałeś swoją implementację C++? –

+0

Większe odchylenie standardowe dla zarządzanej aplikacji może wynikać z czyszczenia pamięci? Czy tworzysz/opuszczasz wiele obiektów? –

+1

Kto powiedział, że klasa 'HttpListener' używa HTTP.SYS ?? Usługi IIS mają, ale nie "HttpListener", w rzeczywistości byłoby interesujące, gdyby tak się stało. Podaj referencję, jeśli uważasz, że tak jest. – Aliostad

Odpowiedz

1

Fakt, że używa Http.sys nie znaczy, że nie jest native do zarządzane przejście. Z wyżej wymienionego artykułu MSDN:

HTTP.sys zapewnia zarządzanie połączeniami, ograniczanie przepustowości i rejestrowanie serwera WWW.

Ze względu na fakt, że są uruchomione kodu zarządzanego, masz współdziałanie (rodzimy zarządzany, nie należy mylić z modelu COM), trzeba zbieranie śmieci itd To nigdy nie będzie tak szybko, jak to czysta natywna implementacja C++.

EDYCJA: Aby to wyjaśnić, nadal działa proces .NET, po prostu podłączasz się do IIS w trybie jądra, a nie w trybie użytkownika. Wielki artykuł na ten temat jest tutaj: http://www.west-wind.com/presentations/howaspnetworks/howaspnetworks.asp

Powiązane problemy