.NET'deki HTTP istekleriyle düşük performans sorunu yaşadım. Localhost'ta bir REST API'sine yapılan HTTP GET isteğinin tamamlanması yaklaşık 500 ms sürdü. Düzeltmek için çok zaman harcadım. Birçok yolu denedim: HttpClient
, HttpWebRequest
, WebClient
ve RestSharp
. Hiçbiri işe yaramıyor. İnternetteki çoğu çözüm, Proxy
parametresini null
olarak ayarlamayı söyledi ancak yine de daha hızlı çalışmayacak.C# HttpClient Keep-Alive öğesi false olarak ayarlanır
bu süreyi azaltmak için bulunan tek yolu false isteğin Keep-Alive parametreyi ayarlamaktır:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
request.Method = "GET";
request.KeepAlive = false;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Bu iyi çalışıyor. Zaman, 7-10 ms'ye düşürüldü. Ama şimdi bazı nedenlerle HttpWebRequest
yerine HttpClient
kullanmam gerekiyor. Ve Keep-Alive öğesini HttpClient
için yanlış olarak nasıl ayarlayacağımı bulamıyorum. Bulduğum tek şey "Keep-Alive" e "bağlantı" başlığı ayarlayarak bunu true olarak nasıl ayarlayacağınızdır.
HttpClient _http = new HttpClient();
_http.DefaultRequestHeaders.Accept.Clear();
_http.DefaultRequestHeaders.Add("Connection", "Keep-Alive");
_http.DefaultRequestHeaders.Add("Keep-Alive", "timeout=600");
var content = new StringContent(
request, Encoding.UTF8, "application/%appname%+xml");
content.Headers.ContentType.Parameters.Add(
new NameValueHeaderValue("type", "payload"));
HttpResponseMessage response = await _http.PostAsync(uri, content);
Ve hala tamamlanması yaklaşık 500-600 ms alır:
Ben HttpClient tarafından POST isteği için bu kodu kullanıyorum.
http://stackoverflow.com/questions/15211812/using-a-keep-alive-connection-in-winrts-httpclient-class ... sadece bir fikir ... –
@AndreasNiedermair Teşekkürler, bu bir ilk Google arama sonucundaki bağlantıyı tıklayın. Bunu zaten denedim: content.Headers.Add ("Keep-Alive", "false"); Ancak bu işlemin tamamlanması için 500 ms'den daha uzun sürüyor. – Vaskrol