2016-10-16 77 views
2

我正在處理包含本機SQLite數據庫的應用程序,該數據庫用於存儲和檢索圖像並將其顯示到我的應用程序中。從數據庫中存儲和檢索圖像時的內存問題

現在我的問題就像我存儲大量的圖像在目錄和其路徑存儲到數據庫中。因此,當我從數據庫中檢索該路徑並將圖像加載到應用程序中時,內存每個圖像的增量可高達10-20 Mb。

我也嘗試將圖像數據存儲到數據庫,但同樣的問題,內存增加每個圖像10-20 Mb。

請問我該怎麼辦這個記憶問題? 幫我看看

+2

圖像佔用大量內存。您需要更新您的問題以及如何使用這些圖像。使用數據庫與您的問題無關。 – rmaddy

+1

此外,圖像有多大(在磁盤空間和分辨率/位深度),以及如何加載它們(imageNamed :, contentsOfFile,從NSData)?您是否顯示它們或以其他方式強制它們被解碼?你如何存儲它們(UIImage,CGImage,NSData)?你期望*他們需要多少內存?作爲rmaddy筆記,圖像很大。在某些情況下,這是沒有辦法的。 –

+0

這個SO回答可能會有助於弄清楚你的圖形內存使用情況:http://stackoverflow.com/a/17225377/763355 – MoDJ

回答

1

圖像在應用程序中使用時,可能需要比持久存儲中資產的大小可能會多的內存。資源經常被壓縮(例如JPG或PNG),但是當您使用圖像時,它們是未壓縮的,通常每個像素需要4個字節(分別爲紅色,綠色,藍色和alpha的一個字節)。因此,例如,當您使用圖像時,iPhone 7+全屏視網膜圖像可能需要14mb。所以,內存高效的技術是採用延遲加載,而不是在你絕對需要它們之前創建對象。而且,正如Jerry所建議的那樣,因爲內存大小取決於圖像的大小,而不是您使用圖像的圖像視圖,所以如果圖像的尺寸大於您在其中使用它們的UIImageView(即寬度和imageview的高度乘以設備的「比例」),則可能需要相應地調整圖像的大小。

+0

我真的非常認同你的答案,你的回答讓我的問題解決了。謝謝 –

1

可能是這樣的情況,您嘗試顯示的圖像比他們需要在屏幕上大得多。嘗試將圖像加載到內存中,創建一個所需大小的版本,然後使用它。當然,你可以實現一些緩存,所以你不必保持調整相同的圖像。但是當原始圖像超出範圍時,其內存將被釋放。如果您始終需要相同尺寸的圖像,請在將圖像存儲到數據庫之前嘗試調整它們大小,但如果您希望支持多種尺寸(對於不同的設備,可能),然後將圖像以您需要的最大尺寸存儲並調整大小其他。

+0

我真的認同你的答案,你的回答讓我的問題得到解決。謝謝 –

相關問題