簡體   English   中英

sdwebimage:可以排隊的 setimageWithUrl 數量有限制嗎?

[英]sdwebimage: is there a limit on how many setimageWithUrl can be queued?

我想知道一次可以提交多少個 setImageWithUrl 消息是否有上限?我正在嘗試加載 30 張照片,其中 10 張已成功下載,但在嘗試調試問題時在 requestFailed 中輸入了其他消息

任何提示或澄清? 謝謝

對於那些來這里尋求關於SDWebImage中最大並發下載次數的答案的人,我想補充上一個答案。

我不建議更改SDWebImageDownloader的init,因為您可能想要更新SDWebImage,或者像我一樣,調整應用程序不同區域的並發下載次數。

//thumbnails.m
//Loading thumbnails. It is faster to load them concurrently
SDWebImageManager.sharedManager.imageDownloader.maxConcurrentDownloads = 10;
[yourImageView setImageWithURL:thumbURL];

//fullScreen.m
//Loading big images in full-screen view, 
SDWebImageManager *sharedManager = [SDWebImageManager sharedManager];
[sharedManager.imageDownloader setMaxConcurrentDownloads:1];
[sharedManager cancelAll]; //cancel all current queue 
[yourImageView setImageWithURL:URL];

雖然您的問題是由於您提到的網址不正確,但我正在為其他尋求答案的人回答這個問題:

可以通過在SDWebImageDownloader的init中設置變量downloadQueue.maxConcurrentOperationCount,在最新版本的SDWebImage框架中設置最大並發下載次數。 這將限制應用程序中“downloadwithURL”調用的最大並發下載次數。 該框架將在隊列中放置任何其他操作,並在當前正在執行的下載完成時執行它們。

我通過設置這個值找到了一個奇怪的問題。 基於apple doc,此值應僅影響並發下載圖像編號,而不影響總下載圖像編號。 但是,如果是我的情況,如果將此值設置為2,我只能下載2個圖像,即使我將下載函數調用為2以上。此值似乎設置了downloadQueue大小的大小,而不是currentOperation數。 任何人都有同樣的問題?

maxConcurrentOperationCountNSOperationQueue在 iPhone 平台上只能設置為 1 或 6。

什么時候應該將maxConcurrentOperationCountNSOperationQueue設置為 6 ?

當可以同時調用多個任務時, maxConcurrentOperationCountNSOperationQueue應該設置為6,比如可以同時下載多張圖片。

為什么特別是 6 而不是 10 或 100?

在名為SDWebImage的框架中,我們可以看到源碼如下:

- (instancetype)init {
   self = [super init];
   if (self) {
       _maxConcurrentDownloads = 6;
       _downloadTimeout = 15.0;
       _executionOrder = SDWebImageDownloaderFIFOExecutionOrder;
       _acceptableStatusCodes = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(200, 100)];
   }
   return self;
}

這段代碼表示默認值為6。 SDWebImage 參考 SDWebImageDownloaderConfig 類參考

maxConcurrentDownloads的含義與maxConcurrentOperationCount ( Apple-Docs-NSOperationQueue-maxConcurrentOperationCount ) 相同

為什么特別是 6 而不是 10 或 100?

從 iPhone 到 iPhone 13 /13 Pro/13 Pro Max,iOS 平台上的最大處理器核心數為 6。

蘋果手機 首次發布 系統開啟 處理器核心數
蘋果手機 2007年 S (三星 S5L8900) 1核
iPhone 3G 2008年 S (三星 S5L8900) 1核
iPhone 3GS 2009年 S(三星 S5PC100 1核
iPhone 4 2010年 A4 1核
iPhone 4S 2011年 A5 2核
iphone 5 2012年 A6 2核
iPhone 5S 2013年 A7 2核
iPhone 6/6 加 2014年 A8 2核
iPhone 6s/6s plus/SE 2015年 A9 2核
iPhone 7/plus 2016年 A9 4 芯(使用 2 芯)
iPhone 8/plus/X 2017年 A11 6 個內核 = 2 個高功率 Monsoon 內核 + 4 個低功率 Mistral 內核
iPhone XS/XS MAX/XR 2018年 A12 6 個內核 = 2 個高功率 Vortex 內核 + 4 個低功率 Tempest 內核
iPhone 11 /11 Pro/11 Pro Max 2019年 A13 6 個內核 = 2 個性能 + 4 個效率內核
iPhone 12 /12 Pro/12 Pro Max 2020年 A14 6 個內核 = 2 個性能 + 4 個效率內核
iPhone 13 /13 Pro/13 Pro Max 2021年 A15 6 個內核 = 2 個性能 + 4 個效率內核

我們可以使用如下代碼打印處理器內核數:

   NSUInteger cpuCoresCount = [[NSProcessInfo processInfo] processorCount];

文檔: Apple-Docs-NSProcessInfo-processorCount

_maxConcurrentDownloads設置為iPhone 平台上的CPU 核數是合理的。

什么時候應該將maxConcurrentOperationCountNSOperationQueue設置為 1 ?

他們將maxConcurrentOperationCount設置為 1 意味着只能同時調用一個任務。

當只能同時調用一個任務時, maxConcurrentOperationCount應設置為1。例如,只能同時對一張GIF圖片進行動畫處理,只能同時播放一個視頻。

Apple-Docs-NSOperationQueue-maxConcurrentOperationCount

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM