Saat melakukan penjadwalan tugas, tugas penjadwalan adalah mensimulasikan memulai permintaan HTTP, dan menemukan bahwa ketika ada lebih banyak tugas, penjadwalan tugas tampaknya seperti kematian palsu.
Jumlah default maksimum koneksi yang diminta pada sistem Windows normal adalah 2, dan pada sistem operasi server, defaultnya adalah 10. Jika Anda tidak mengubah batas koneksi bersamaan ini,Kemudian jumlah koneksi http yang dapat dilakukan klien secara bersamaan hanya 2 atau 10。
System.Net.ServicePointManager.DefaultConnectionLimit Ini adalah jumlah maksimum koneksi yang bisa mendapatkan pengaturan default saat ini, seperti yang ditunjukkan pada gambar di bawah ini:
Apakah ada batas konkurensi default untuk HttpClient?
Sebelum .Net 4.0, operasi Http diandalkan oleh HttpWebRequest. Ini memiliki maksimum 2 batas konkurensi yang sangat konservatif untuk situs yang sama secara default, yang sering menyebabkan HttpWebRequests tidak mendapatkan kecepatan ideal secara default (saya kira strategi ini membuat frustrasi banyak pembuat kode), dan nilai App.config atau ServicePointManager.DefaultConnectionLimit harus dimodifikasi.
MS memperkenalkan kelas HttpClient di .Net 4.5 untuk menangani operasi Http, dan saya pikir HttpClient dan HttpWebRequest mengikuti kebijakan yang sama. Hari ini, ketika menulis program unduhan multi-utas, saya menggunakan 10 koneksi bersamaan dan menemukan bahwa HttpClient tidak memiliki batas jumlah bersamaan secara default.
Awalnya saya pikir itu. Net 4.5 menghapus batas konkurensi ini (bagaimanapun, pada dasarnya tidak ada yang mengikuti standar ini sekarang), dan kemudian menulis ulang kode yang relevan dengan WebRequest, dan menemukan bahwa itu masih 2 batas konkurensi, dan nilai ServicePointManager.DefaultConnectionLimit juga 2. Artinya, HttpClient tidak dikendalikan oleh kebijakan konkurensi HttpWebRequest, dan tidak ada batas konkurensi tingkat sistem.
Selain itu, selama pengujian, saya menemukan bahwa HttpWebRequest tidak default ke maksimum 2 konkurensi untuk semua alamat. MisalnyaTidak ada batas konkurensi untuk koneksi alamat HTTP lokal (http://localhost/*).。
Panggilan lingkungan multithread C# ke batas koneksi bersamaan HttpWebRequest
HttpWebRequest atau WebClient .net memiliki batas koneksi bersamaan dalam kasus multithreading, yaitu 2 secara default pada sistem operasi desktop seperti Windows XP dan Windows 7, dan 10 secara default pada sistem operasi server. Jika Anda tidak mengubah batas koneksi bersamaan ini, jumlah koneksi HTTP yang dapat dibuat klien pada satu waktu hanya 2 atau 10. Untuk beberapa aplikasi, seperti browser atau spider, jumlah 2 atau 10 konkurensi terlalu kecil dan sangat mempengaruhi kinerja aplikasi. Batas koneksi bersamaan ini disebabkan oleh standar HTTP 1.0 dan HTTP 1.1 yang menentukan maksimum 2 koneksi bersamaan. Namun, browser arus utama tidak lagi mengikuti aturan ini, tetapi kerangka kerja .NET masih mengikuti aturan ini secara default.
Banyak artikel mengatakan bahwa mengakses HttpWebRequest secara asinkron dapat meningkatkan performa bersamaan, tetapi saya telah menguji bahwa jika Anda tidak mengubah jumlah default koneksi bersamaan, performa akses sinkron atau asinkron tidak baik.
Kita juga dapat mengatur jumlah maksimum koneksi bersamaan di app.config sebagai berikut:
Artikel referensi
Login hyperlink terlihat.
Login hyperlink terlihat.
|