HttpClient
, birden fazla çağrı için yeniden kullanılmak üzere tasarlanmıştır . Birden çok iş parçacığında bile. HttpClientHandler
Tekrar kullanılan çağrıları arasında olması amaçlanmıştır Kimlik ve Çerezler vardır. Yeni bir HttpClient
örneğe sahip olmak, tüm bu şeylerin yeniden ayarlanmasını gerektirir. Ayrıca, DefaultRequestHeaders
özellik birden çok çağrıya yönelik özellikler içerir. Her istekte bu değerlerin sıfırlanması zorunluluktur.
Diğer bir önemli yararı, kesişen endişeleri uygulamak için talep / yanıt boru hattına HttpClient
ekleme yeteneğidir HttpMessageHandlers
. Bunlar günlüğe kaydetme, denetim, azaltma, yönlendirme yönetimi, çevrimdışı işleme, metrikleri yakalamak için olabilir. Her türlü farklı şey. Her istekte yeni bir HttpClient oluşturulduysa, bu ileti işleyicilerinin hepsinin her istekte ayarlanması ve bir şekilde bu işleyicilerin istekleri arasında paylaşılan herhangi bir uygulama düzeyi durumunun da sağlanması gerekir.
Özelliklerini ne kadar çok kullanırsanız, HttpClient
mevcut bir örneği yeniden kullanmanın daha mantıklı olduğunu göreceksiniz.
Ancak, en büyük sorun, bence bir HttpClient
sınıf atıldığında, yönetilen bağlantı havuzundaki bağlantıyı HttpClientHandler
zorla kapatacak şekilde atıyor . Bu, yeni olan her isteğin yeni bir bağlantının yeniden kurulmasını gerektirdiği anlamına gelir .TCP/IP
ServicePointManager
HttpClient
TCP/IP
Testlerimden, bir LAN üzerinde düz HTTP kullanarak, performans isabeti oldukça ihmal edilebilir. Bunun nedeni, bağlantıyı HttpClientHandler
kapatmaya çalışsa bile bağlantıyı açık tutan altta yatan bir TCP tutma özelliği olduğundan şüpheleniyorum .
İnternet üzerinden yapılan taleplerde farklı bir hikaye gördüm. İsteği her seferinde yeniden açmak zorunda kaldığım için% 40 performans artışı gördüm.
Bir HTTPS
bağlantı üzerindeki isabetin daha da kötü olacağını düşünüyorum.
Benim tavsiyem, bağlandığınız her farklı API için uygulamanızın ömrü boyunca bir HttpClient örneğini saklamaktır .
Stopwatch
, ancak sınıf karşılaştırmak için kullanabilirsiniz . Benim tahminimHttpClient
, tüm bu örneklerin aynı bağlamda kullanıldığı varsayılarak, tekli olmak daha mantıklı olacaktır .