2012-05-03 43 views
16

Tôi đã viết một chương trình đa luồng trong C# thu thập thông tin một trang web, nhưng khi tôi bắt đầu Fiddler trong yêu cầu nền hoàn thành nhanh hơn 12x, nó thực sự lạ đối với tôi và khi tôi đóng tỷ lệ tải xuống Fiddler chậm lại. làm thế nào nó có thể xin vui lòng giúp đỡ, (không có thiết lập proxy cho kết nối của tôi để ineternet và cho Fiddler quá) Nếu tôi có thể tiêm hiệu suất của fiddler trong ứng dụng của tôi nó sẽ là tuyệt vời, bất kỳ giải pháp? Có ma thuật đằng sau hậu trường không ?? :)Tại sao Http yêu cầu với Fiddler là nhanh chóng

Cảm ơn

Trả lời

11

Bạn có thể hiển thị một số mã mẫu để mọi người có thể xác nhận điều này không? Nếu không nó sẽ trở thành hoang dã đoán.

Đoán tốt nhất của tôi: Fiddler uses keepalive điều này sẽ tiết kiệm được sự cố khi mở kết nối lặp đi lặp lại. Bạn có thể xác nhận điều này bằng cách tắt cả hai Reuse client connectionsReuse connections to servers: nếu sau đó nó chậm như bình thường (hoặc chậm hơn), lợi ích thu được từ việc giữ kết nối còn sống.

+0

Trong chương trình khi tạo kết nối và tải xuống nội dung, tôi sẽ đóng phản hồi và hủy yêu cầu trong lần cuối, nhưng tôi tự hỏi rằng đây cũng là mã đang chạy với fiddler ở chế độ nền và Nhanh. sao Fiddler có thay đổi yêu cầu của tôi và sử dụng cùng một kết nối cho mỗi yêu cầu không? – Ehsan

+0

@Eshan _ "Fiddler có thay đổi yêu cầu của tôi và sử dụng cùng một kết nối cho mỗi yêu cầu không?" _ Có. – CodeCaster

+1

vì vậy làm thế nào tôi có thể sử dụng tính năng này trong chương trình của tôi với HttpWebRequest? – Ehsan

22

Lý do là giới hạn số lượng kết nối http bị bỏ qua khi sử dụng Fiddler.

Tôi gặp phải hành vi tương tự khi sử dụng System.Net.Http.HttpClient để thực hiện nhiều yêu cầu đồng thời (~ 80). Với Fiddler đang chạy, tất cả các yêu cầu đã hoàn thành nhanh hơn nhiều. Keep-alive chắc chắn đã được kích hoạt.

Tôi đã sử dụng Wireshark để xem điều gì đang xảy ra và điều đầu tiên tôi nhận thấy rằng cách thức lưu lượng truy cập http khác nhau. Với các yêu cầu Fiddler đã được ném tất cả cùng một lúc và sau đó phản ứng theo sau độc đáo nhóm là tốt. Nếu không có Fiddler, các yêu cầu được xen kẽ với các phản hồi.

Thứ hai, tcpview cho thấy mã của tôi không có Fiddler chỉ tạo 2 kết nối tcp với máy chủ. Với Fiddler bắt đầu, số lượng kết nối tăng mạnh. Đã có hàng chục người trong số họ từ ứng dụng của tôi đến Fiddler và sau đó từ Fiddler đến máy chủ.

Người ta biết rằng tiêu chuẩn http đề xuất số lượng kết nối http không được nhiều hơn 2 và có vẻ như giới hạn được triển khai dưới dạng cài đặt mặc định trong các ứng dụng khách http.

Trong các ứng dụng .NET, chúng tôi có thể kiểm soát giới hạn với thuộc tính tĩnh ServicePointManager.DefaultConnectionLimit. Là một thử nghiệm, việc đặt nó thành 100 làm cho các yêu cầu thực thi cùng một tốc độ có hoặc không có Fiddler.

Các thiết lập cũng có thể được kiểm soát thông qua app.config:

<system.net> 
    <connectionManagement> 
     <add address="*" maxconnection="100" /> 
    </connectionManagement> 
</system.net> 

Bây giờ, tại sao giới hạn kết nối mặc định không được tôn trọng khi sử dụng Fiddler? Hóa ra giới hạn là khác nhau khi một máy khách http sử dụng một proxy và Fiddler hoạt động như một proxy. Tôi không tìm thấy nhiều thông tin về giới hạn kết nối proxy bên cạnh this old article.

Các vấn đề liên quan