Podczas planowania zadań zadaniem jest symulacja inicjowania żądania HTTP i odkrycie, że gdy jest więcej zadań, harmonogramowanie zadań wydaje się być jak fałszywa śmierć.
Maksymalna domyślna liczba żądanych połączeń na zwykłym systemie Windows wynosi 2, a na systemie operacyjnym serwera domyślnie wynosi 10. Jeśli nie zmodyfikujesz tego limitu łącza współczesnego,Wtedy liczba połączeń http, które klient może nawiązać jednocześnie, wynosi tylko 2 lub 10。
System.Net.ServicePointManager.DefaultConnectionLimit To maksymalna liczba połączeń, które mogą uzyskać aktualne domyślne ustawienie, jak pokazano na poniższym rysunku:
Czy istnieje domyślny limit współbieżności dla HttpClient?
Przed .Net 4.0 operacje Http były wykorzystywane przez HttpWebRequest. Domyślnie ma bardzo zachowawcze maksimum 2 limitów współbieżności dla tej samej strony, co często powoduje, że HttpWebRequests domyślnie nie osiąga idealnej prędkości (chyba ta strategia frustruje wielu programistów), a wartość App.config lub ServicePointManager.DefaultConnectionLimit musi być modyfikowana.
MS wprowadziło klasę HttpClient w .Net 4.5 do obsługi operacji Http, a ja myślałem, że HttpClient i HttpWebRequest stosują tę samą politykę. Dziś, pisząc program do pobierania wielowątkowo-wątkowo, użyłem 10 łączeń równocześnie i odkryłem, że HttpClient domyślnie nie ma limitu liczby współbieżnych połączeń.
Na początku myślałem, że tak. Net 4.5 usunął ten limit współbieżności (w końcu praktycznie nikt już nie stosuje tego standardu), a następnie przepisał odpowiedni kod za pomocą WebRequest i okazało się, że limit współbieżności nadal był 2, a wartość ServicePointManager.DefaultConnectionLimit również wynosiła 2. Oznacza to, że HttpClient nie jest kontrolowany przez politykę współbieżności HttpWebRequest i nie ma limitu współbiegu na poziomie systemowym.
Dodatkowo, podczas testów zauważyłem, że HttpWebRequest nie domyślnie stosuje maksymalnie 2 współbieżności dla wszystkich adresów. Na przykładNie ma limitu współbieżności dla lokalnych połączeń adresowych HTTP (http://localhost/*).。
C# wielowątkowe wywołania środowiska do limitu łączeń współżytnych HttpWebRequest
HttpWebRequest lub WebClient w .net ma limit łączeń współcześnych w przypadku wielowątkowania, który domyślnie wynosi 2 na komputerach stacjonarnych, takich jak Windows XP i Windows 7, oraz 10 domyślnie na systemach serwerowych. Jeśli nie zmienisz tego limitu łączy współbieżnych, liczba połączeń HTTP, które klient może nawiązać jednocześnie, wynosi tylko 2 lub 10. W niektórych aplikacjach, takich jak przeglądarki czy pająki, liczba 2 lub 10 współbieżności jest zbyt mała i znacząco wpływa na wydajność aplikacji. Limit łączeń współczesnych wynika ze standardów HTTP 1.0 i HTTP 1.1, które określają maksymalnie 2 połączenia równoczesne. Jednak główne przeglądarki nie stosują już tej zasady, ale framework .NET nadal stosuje ją domyślnie.
Wiele artykułów mówi, że dostęp do HttpWebRequest asynchronicznie może poprawić wydajność równoczesną, ale testowałem, że jeśli nie zmienisz domyślnej liczby łączy równoczesnych, wydajność dostępu synchronicznego lub asynchronicznego nie jest dobra.
Możemy także ustawić maksymalną liczbę jednoczesnych połączeń w app.config w następujący sposób:
Artykuł referencyjny
Logowanie do linku jest widoczne.
Logowanie do linku jest widoczne.
|