Tôi đang viết một ứng dụng tải lên các tệp lớn lên dịch vụ web bằng cách sử dụng HttpWebRequest.Gửi tệp lớn với HttpWebRequest, phát triển/thu hẹp bộ đệm khi cần
Ứng dụng này sẽ được điều hành bởi nhiều người với tốc độ internet khác nhau.
Tôi đọc đồng bộ tệp một cách không đồng bộ và ghi không đồng bộ các đoạn đó vào luồng yêu cầu. Tôi làm điều này trong một vòng lặp bằng cách sử dụng callbacks. Và tôi tiếp tục làm điều này cho đến khi toàn bộ tập tin đã được gửi đi.
Tốc độ tải lên được tính giữa các lần viết và GUI sau đó được cập nhật để hiển thị tốc độ nói.
Vấn đề tôi đang gặp phải đang quyết định kích thước bộ đệm. Nếu tôi làm cho nó quá lớn, người dùng có kết nối chậm sẽ không thấy các cập nhật thường xuyên về tốc độ. Nếu tôi làm cho nó quá nhỏ, người dùng với các kết nối nhanh sẽ kết thúc "búa" các phương pháp đọc/ghi gây ra việc sử dụng CPU để tăng đột biến.
Điều tôi đang làm bây giờ là bắt đầu bộ đệm ở 128kb, và sau đó cứ 10 lần tôi kiểm tra tốc độ ghi trung bình của 10 ghi đó, và nếu dưới một giây tôi tăng dung lượng bộ đệm lên 128kb. Tôi cũng thu nhỏ bộ đệm theo cách tương tự nếu tốc độ ghi giảm xuống dưới 5 giây.
Điều này hoạt động khá tốt, nhưng tất cả đều cảm thấy rất tùy tiện và có vẻ như có chỗ để cải thiện. Câu hỏi của tôi là, có ai xử lý một tình huống tương tự và bạn đã thực hiện hành động gì?
Cảm ơn
Điều này có vẻ như một cách tiếp cận rất chắc chắn. Và nó cũng hoạt động. Tôi sẽ không thay đổi nó. – zmbq