HttpClienttelah dirancang untuk digunakan kembali untuk beberapa panggilan . Bahkan di banyak utas. The HttpClientHandlermemiliki Kredensial dan Cookie yang dimaksudkan untuk digunakan kembali di seluruh panggilan. Memiliki HttpClientinstance baru memerlukan pengaturan ulang semua hal itu. Selain itu, DefaultRequestHeadersproperti berisi properti yang dimaksudkan untuk beberapa panggilan. Harus mengatur ulang nilai-nilai itu pada setiap permintaan mengalahkan intinya.
Manfaat utama lainnya HttpClientadalah kemampuan untuk menambahkan HttpMessageHandlerske 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 HttpClientkelas dibuang, ia dibuang HttpClientHandler, yang kemudian secara paksa menutup TCP/IPkoneksi di kumpulan koneksi yang dikelola oleh ServicePointManager. Ini berarti bahwa setiap permintaan dengan yang baru HttpClientmemerlukan membangun kembali TCP/IPkoneksi 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 HttpClientHandlermencoba 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 HTTPSkoneksi akan lebih buruk.
Saran saya adalah untuk membuat instance HttpClient untuk aplikasi Anda seumur hidup untuk setiap API berbeda yang Anda sambungkan.
Stopwatchkelas untuk membandingkannya. Perkiraan saya akan lebih masuk akal untuk memiliki satuHttpClient, dengan asumsi semua contoh tersebut digunakan dalam konteks yang sama.