Tôi gặp sự cố hiệu suất thấp với các yêu cầu HTTP trên .NET. Yêu cầu HTTP GET tới một API REST trên localhost mất khoảng 500 ms để hoàn tất. Tôi đã dành rất nhiều thời gian để sửa chữa nó. Tôi đã thử nhiều cách: HttpClient
, HttpWebRequest
, WebClient
và RestSharp
. Không ai trong số họ làm việc. Hầu hết các giải pháp trên Internet cho biết để đặt tham số Proxy
thành null
nhưng vẫn không hoạt động nhanh hơn.C# Cách đặt HttpClient Keep-Alive thành false
Cách duy nhất tôi tìm thấy để giảm thời gian này là để thiết lập các thông số Giữ-Alive đề nghị false:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
request.Method = "GET";
request.KeepAlive = false;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
này hoạt động tuyệt vời. Thời gian giảm xuống còn 7-10 ms. Nhưng bây giờ trong một số lý do tôi cần phải sử dụng HttpClient
thay vì HttpWebRequest
. Và tôi không thể tìm cách đặt Keep-Alive thành false cho HttpClient
. Điều duy nhất tôi tìm thấy là làm thế nào để thiết lập nó thành true bằng cách thiết lập một "kết nối" tiêu đề để "Giữ-Alive".
Tôi đang sử dụng mã này cho yêu cầu POST bởi HttpClient:
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);
Và nó vẫn mất khoảng 500-600 ms để hoàn thành.
http://stackoverflow.com/questions/15211812/using-a-keep-alive-connection-in-winrts-httpclient-class ... chỉ là một ý tưởng ... –
@AndreasNiedermair Cảm ơn, đây là lần đầu tiên trong kết quả tìm kiếm của Google. Tôi đã thử điều này: content.Headers.Add ("Keep-Alive", "false"); Nhưng điều này mất hơn 500 ms để hoàn thành quá. – Vaskrol