我使用 LRU 和磁盘缓存将一些图像缓存在内存和磁盘上。以前我用
private LruCache<String, Bitmap> mMemoryCache;
保存图像,但是当我观察分配堆栈时,我看到了很多字符串分配,这对我来说很清楚,因为每次我使用mMemoryCache.get(cs);
它都会分配一个新的字符串对象。
在我绘制每个位图的过程中,我需要在每帧中使用大约 50-100 次缓存,这将导致大量 GC,因为存在时间短的字符串。
我怎样才能防止这种情况?
我查看了有关如何防止字符串分配的其他问题,例如这个问题,我使用 David 的解决方案来显示 Debug FPS,但我不能将它用于这个特殊的缓存版本。
我将每个图像分成 100x100 的图块,我的缓存键看起来像这样pageNumber-withcount-heightcount-zoomfactor
我尝试使用 aStringBuffer
但这不起作用,因为toString()
将分配一个新的String
,我需要比较内容。我可以尝试使用带有 000 的 int/float 作为“-”的替代品,甚至可以在我的缓存类中使用 char[] 数组,但是最好的方法是什么?