2011-02-08 7 views
11

Tôi đang sử dụng WebClient để tải về một chuỗi từ một trang web (trong đó chỉ chứa văn bản đơn giản, không có gì khác), vì vậy tôi sử dụng phương pháp DownloadString:C# WebClient diễn xuất chậm lần đầu tiên

WebClient wc = new WebClient(); 
string str = wc.DownloadString("http://blah"); 

Nó hoạt động tốt , nhưng vấn đề là lần đầu tiên nó tải chuỗi nó mất một thời gian dài, như 5 giây. Sau đó nó hoạt động nhanh. Tại sao điều này xảy ra và cách khắc phục vấn đề này?

+0

Đây có phải là dịch vụ web của bạn hoặc một ai elses? và điều này có xảy ra mỗi khi bạn khởi động ứng dụng của mình không? (ngay cả khi khởi động lại trực tiếp khi chuỗi được tải xuống?) – Peter

+0

Related: http://stackoverflow.com/questions/4415443 –

+0

Cũng lưu ý rằng điều này làm cho ứng dụng bị đóng băng, ngay cả khi sử dụng phiên bản 'async' của phương thức. Làm thế nào để shit như thế này được phát hành !? –

Trả lời

21

Đặt thuộc tính Proxy của đối tượng WebClient thành giá trị rỗng sẽ loại bỏ sự chậm trễ mà bạn đang thấy. Ngoài ra, nếu bạn đã định cấu hình hệ thống của mình để sử dụng proxy, nó có thể được truy xuất với WebRequest.GetSystemWebProxy. Phương pháp thứ hai nên loại bỏ sự chậm trễ trong cả hai trường hợp.

+0

Câu trả lời hay! Cảm ơn nhiều. –

+0

Câu trả lời hoàn hảo. Cảm ơn. – Kloar

+0

Câu trả lời tuyệt vời. Cảm ơn! –

3

Vâng, lần đầu tiên cần thực hiện tra cứu DNS và kết nối với máy chủ lưu trữ - sau đó, trong cùng một quá trình, nó cũng có thể sử dụng lại cùng một kết nối. Đối với yêu cầu đầu tiên để bất cứ nơi nào, nó có thể cũng cũng thể cố gắng để phát hiện cài đặt proxy, vv

Nếu bạn muốn xem những gì đang thực sự xảy ra ở cấp độ mạng để làm cho nó chậm, tôi đề nghị bạn lấy Wireshark và theo dõi lưu lượng truy cập với điều đó.

6

Tôi cũng nhận thấy điều tương tự. DotTrace thấy nó dành phần lớn thời gian liệt kê tùy chọn proxy của nó: