HttpClient
telah dirancang untuk digunakan kembali untuk beberapa panggilan . Bahkan di banyak utas. The HttpClientHandler
memiliki Kredensial dan Cookie yang dimaksudkan untuk digunakan kembali di seluruh panggilan. Memiliki HttpClient
instance baru memerlukan pengaturan ulang semua hal itu. Selain itu, DefaultRequestHeaders
properti berisi properti yang dimaksudkan untuk beberapa panggilan. Harus mengatur ulang nilai-nilai itu pada setiap permintaan mengalahkan intinya.
Manfaat utama lainnya HttpClient
adalah kemampuan untuk menambahkan HttpMessageHandlers
ke dalam pipa permintaan / respons untuk menerapkan masalah lintas sektoral. Ini bisa untuk pencatatan, audit, pembatasan, penanganan pengalihan, penanganan offline, metrik pengambilan. Segala macam hal berbeda. Jika HttpClient baru dibuat pada setiap permintaan, maka semua penangan pesan ini harus disiapkan pada setiap permintaan dan entah bagaimana keadaan tingkat aplikasi yang dibagi antara permintaan untuk penangan ini juga perlu disediakan.
Semakin banyak Anda menggunakan fitur HttpClient
, semakin Anda akan melihat bahwa menggunakan kembali contoh yang ada masuk akal.
Namun, masalah terbesar, menurut saya adalah ketika sebuah HttpClient
kelas dibuang, ia dibuang HttpClientHandler
, yang kemudian secara paksa menutup TCP/IP
koneksi di kumpulan koneksi yang dikelola oleh ServicePointManager
. Ini berarti bahwa setiap permintaan dengan yang baru HttpClient
memerlukan membangun kembali TCP/IP
koneksi baru .
Dari pengujian saya, menggunakan HTTP biasa pada LAN, kinerja hit cukup diabaikan. Saya menduga ini karena ada keepalive TCP yang mendasarinya yang menahan koneksi terbuka bahkan ketika HttpClientHandler
mencoba untuk menutupnya.
Atas permintaan yang masuk internet, saya telah melihat cerita yang berbeda. Saya telah melihat hit kinerja 40% karena harus membuka kembali permintaan setiap waktu.
Saya menduga hit pada HTTPS
koneksi akan lebih buruk.
Saran saya adalah untuk membuat instance HttpClient untuk aplikasi Anda seumur hidup untuk setiap API berbeda yang Anda sambungkan.
Stopwatch
kelas untuk membandingkannya. Perkiraan saya akan lebih masuk akal untuk memiliki satuHttpClient
, dengan asumsi semua contoh tersebut digunakan dalam konteks yang sama.