Görev zamanlama yaparken, planlamanın görevi HTTP talebinin başlatılmasını simüle etmektir ve daha fazla görev olduğunda görev zamanlamanın sahte ölüm gibi göründüğünü görmektir.
Normal bir Windows sisteminde istenen bağlantıların maksimum varsayılan sayısı 2'dir, sunucu işletim sisteminde ise varsayılan olarak 10'dur. Bu eşzamanlı bağlantı sınırını değiştirmezseniz,O zaman istemcinin aynı anda kurabileceği HTTP bağlantılarının sayısı sadece 2 veya 10 olur。
System.Net.ServicePointManager.DefaultConnectionLimit Bu, aşağıdaki şekilde gösterildiği gibi mevcut varsayılan ayarı alabilecek maksimum bağlantı sayısıdır:
HttpClient için varsayılan bir eşzamanlılık sınırı var mı?
.Net 4.0'dan önce, Http işlemleri HttpWebRequest tarafından kullanılıyordu. Aynı site için varsayılan olarak çok muhafazakar maksimum 2 eşzamanlılık sınırı vardır, bu da genellikle HttpWebRequest'lerin varsayılan olarak ideal hızı almamasına neden olur (sanırım bu strateji birçok kodlayıcıyı sinirlendirir), ayrıca App.config veya ServicePointManager.DefaultConnectionLimit değeri değiştirilmelidir.
MS, .Net 4.5'te Http işlemlerini yönetmek için bir HttpClient sınıfı tanıttı ve HttpClient ile HttpWebRequest'in aynı politikayı takip ettiğini düşündüm. Bugün, çok iş parçacıklı bir indirme programı yazarken, 10 eşzamanlı bağlantı kullandım ve HttpClient'ın varsayılan olarak eşzamanlı sayı sınırı olmadığını fark ettim.
İlk başta öyle sandım. Net 4.5 bu eşzamanlılık sınırını kaldırdı (sonuçta artık kimse bu standardı takip etmiyor), ardından ilgili kodu WebRequest ile yeniden yazdı ve bunun hâlâ 2 eşzamanlılık sınırı olduğunu, ServicePointManager.DefaultConnectionLimit değerinin de 2 olduğunu buldu. Yani, HttpClient HttpWebRequest eşdeğerlik politikası tarafından kontrol edilmez ve sistem düzeyinde eşdeğerlik sınırı yoktur.
Ayrıca, test sırasında HttpWebRequest'in tüm adresler için en fazla 2 eşzamanlılık varsayılan olmadığını gördüm. MeselaYerel HTTP adres bağlantıları için eşzamanlılık sınırı yoktur (http://localhost/*).。
C# çok iş parçacıklı ortam çağrıları HttpWebRequest eşzamanlı bağlantı sınırına
.net'in HttpWebRequest veya WebClient çoklu iş parçacığı durumunda eşzamanlı bağlantı sınırına sahiptir; Windows XP ve Windows 7 gibi masaüstü işletim sistemlerinde varsayılan olarak 2, sunucu işletim sistemlerinde ise varsayılan olarak 10'dur. Bu eşzamanlı bağlantı sınırını değiştirmezseniz, bir istemcinin aynı anda yapabileceği HTTP bağlantılarının sayısı sadece 2 veya 10 olur. Bazı uygulamalarda, örneğin tarayıcılar veya örümcekler için, 2 veya 10 eşzamanlılık sayısı çok azdır ve uygulamanın performansını büyük ölçüde etkiler. Bu eşzamanlı bağlantı sınırı, HTTP 1.0 ve HTTP 1.1 standartlarının en fazla 2 eşzamanlı bağlantı belirtmesine bağlıdır. Ancak, ana akım tarayıcılar artık bu kurala uymaz, ancak .NET çerçevesi varsayılan olarak hâlâ bu kurala uyulmaktadır.
Birçok makale, HttpWebRequest'e eşzamanlı erişimin eşzamanlı performansı iyileştirebileceğini söylüyor, ancak eşzamanlı bağlantı sayısını varsayılan olarak değiştirmezseniz, eşzamanlı veya asenkron erişim performansının iyi olmadığını test ettim.
app.config içinde eşzamanlı bağlantıların maksimum sayısını da şu şekilde ayarlayabiliriz:
Referans makalesi
Bağlantı girişi görünür.
Bağlantı girişi görünür.
|