HttpClient, birden fazla çağrı için yeniden kullanılmak üzere tasarlanmıştır . Birden çok iş parçacığında bile. HttpClientHandlerTekrar 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 HttpClientekleme 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, HttpClientmevcut bir örneği yeniden kullanmanın daha mantıklı olduğunu göreceksiniz.
Ancak, en büyük sorun, bence bir HttpClientsınıf atıldığında, yönetilen bağlantı havuzundaki bağlantıyı HttpClientHandlerzorla 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/IPServicePointManagerHttpClientTCP/IP
Testlerimden, bir LAN üzerinde düz HTTP kullanarak, performans isabeti oldukça ihmal edilebilir. Bunun nedeni, bağlantıyı HttpClientHandlerkapatmaya ç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 HTTPSbağ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 .