解决单个图片解码后内存占用超过内存缓存最大值,导致无法显示图片的问题
Signed-off-by: madixin <madixin@huawei.com>
This commit is contained in:
parent
b0661e83ac
commit
95ffcb9e74
|
@ -46,6 +46,11 @@ export class MemoryLruCache implements IMemoryCache {
|
|||
throw new Error('key or value is invalid ');
|
||||
}
|
||||
|
||||
let size = this.getImageKnifeDataSize(value)
|
||||
if (size <= 0 && size >= this.maxMemory) {
|
||||
return
|
||||
}
|
||||
|
||||
// 如果size满了的话,需要按照LRU的方式删除第一个
|
||||
if (this.lruCache.length == this.maxSize && !this.lruCache.contains(key)) {
|
||||
this.remove(this.lruCache.keys()[0])
|
||||
|
@ -53,12 +58,9 @@ export class MemoryLruCache implements IMemoryCache {
|
|||
this.remove(key)
|
||||
}
|
||||
|
||||
let pre: ImageKnifeData = this.lruCache.put(key, value)
|
||||
this.addMemorySize(value)
|
||||
// if (pre !== undefined) { // 当前返回不是key的之前value
|
||||
// this.removeMemorySize(pre)
|
||||
// }
|
||||
this.trimToSize();
|
||||
this.lruCache.put(key, value)
|
||||
this.currentMemory += size
|
||||
this.trimToSize()
|
||||
}
|
||||
|
||||
get(key: string): ImageKnifeData | undefined {
|
||||
|
@ -119,19 +121,21 @@ export class MemoryLruCache implements IMemoryCache {
|
|||
}
|
||||
}
|
||||
|
||||
private addMemorySize(value: ImageKnifeData): void {
|
||||
private getImageKnifeDataSize(value: ImageKnifeData): number {
|
||||
if (value.source != undefined) {
|
||||
if (typeof value.source === 'string' && value.source != "") {
|
||||
this.currentMemory += value.source.length
|
||||
return value.source.length
|
||||
} else if (value.source == "") {
|
||||
for (let index = 0;index < value.imageAnimator!.length;index++) {
|
||||
let size: number = 0
|
||||
for (let index = 0; index < value.imageAnimator!.length; index++) {
|
||||
let pixelMap = value.imageAnimator![index].src as PixelMap
|
||||
this.currentMemory += pixelMap.getPixelBytesNumber()
|
||||
size += pixelMap.getPixelBytesNumber()
|
||||
}
|
||||
return size
|
||||
} else {
|
||||
this.currentMemory += value.source.getPixelBytesNumber();
|
||||
return value.source.getPixelBytesNumber();
|
||||
}
|
||||
//LogUtil.log("MemoryCache addMemorySize: " + value.source.getPixelBytesNumber() + " currentMemory:" + this.currentMemory)
|
||||
}
|
||||
return 0
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue