Trường hợp My Test này, chỉ ra rằng khi sử dụng NSURLSession với kết nối HTTP/2 có vấn đề về bộ nhớ.NSURLSự suy giảm bộ nhớ HTTP/2
test1: iOS 9. HTTP/2 máy chủ
tôi sử dụng NSURLSession để tải lên tập tin 10M để 2 máy chủ HTTP /, nếu các tập tin được tải lên hoàn thành tất cả mọi thứ là ok, Nhưng nếu tôi hủy bỏ nhiệm vụ upload trước nó đã hoàn thành, 10 triệu sẽ không bao giờ phát hành.
test2: iOS 9. HTTPs1.1 máy chủ
tôi thử nghiệm cùng mã với một máy chủ tập tin https1.1, tôi hủy bỏ nhiệm vụ tải lên hay không, mọi thứ đều ok, bộ nhớ trở lại bình thường. (dữ liệu 10M được phát hành)
iOS Test3 8. HTTP/2 máy chủ
trường hợp này mọi thứ đều ok. (NSURLSession không giao thức đàm phán để HTTP/2)
Vì vậy, thậm chí có một số điều không phù hợp với việc sử dụng NSURLSession của tôi, hiệu năng NSURLSession không bình thường với HTTP/2.
Bên cạnh vấn đề bộ nhớ, khi sử dụng NSURLSession với HTTP/2 để tải lên tập tin kích thước phân đoạn tiến bộ là rất lớn (tháng 2M 'didSendBodyData' tại một cuộc gọi trở lại)
Tôi cũng đã đọc this page. SSL có thể lưu trữ một số thứ, nhưng không nên lưu toàn bộ tập tin. (Khi tôi hủy tác vụ hoặc yêu cầu hết thời gian chờ, rò rỉ bộ nhớ kích thước tệp 10M)
Bất cứ ai cũng biết được sự cố. Cảm ơn.
Câu hỏi cập nhật 0912: thêm một liên kết dự án thử nghiệm
dự án thử nghiệm: https://github.com/upyun/swift-sdk/tree/testleak
file:UPUtils.swift
//Change the url to make comparison test.
//let DEFAULT_UPYUN_FORM_API_DOMAIN = "http://v0.api.upyun.com"//http1.1
//let DEFAULT_UPYUN_FORM_API_DOMAIN = "https://httpbin.org/post" //https1.1
let DEFAULT_UPYUN_FORM_API_DOMAIN = "https://v0.api.upyun.com"//http2
bài viết mã của bạn. – Segev
Đã thêm liên kết vào dự án thử nghiệm và \t đã chỉnh sửa câu hỏi gốc. Cảm ơn vì đã dành thời gian cho tôi. @Segev – rotoava
Tôi khuyên bạn nên sử dụng uploadTaskWithStreamedRequest để tải lên lớn –