Middle
Оё медонӣ, ки чӣ гуна кор мекунад корт-кеш?
sobes.tech AI
Ҷавоб аз AI
Картаи ёддоштӣ (Memory Cache) дар Android — механизмест барои нигоҳ доштани маълумот дар хотираи оперативии дастгоҳ барои дастрасии зуд. Он асос ёфтааст ба принсипҳои кеши асоциативӣ.
Чӣ гуна кор мекунад:
- Пурсиши маълумот: Ҳангоми дархост кардани маълумоте, ки метавонад кеш шавад (масалан, тасвир аз шабака ё натиҷаи амалиёти мураккаб), барнома аввал кешро санҷида мебинад.
- Ҷустуҷӯ дар кеш: Агар маълумот дар кеш ёфтанӣ бошад (яъне, калиди дархост бо калиди дар кеш мувофиқат мекунад), онҳо фавран баргардонида мешаванд, бо ин роҳ аз амалиётҳои даромад-баромад ё ҳисобкунии сустӣ канорагирӣ мешавад. Инро "cache hit" меноманд.
- Хатои кеш (Cache Miss): Агар маълумот дар кеш ёфтанӣ набошад ("cache miss"), барнома онҳоро аз манбаи аслӣ мегирад (шабака, базаи додаҳо ва ғайра).
- Насб кардан дар кеш: Пас аз гирифтани маълумот, онҳо ба кеш ҷойгир карда мешаванд барои дархостҳои оянда бо ҳамин калид.
- Вуруд (Cache Eviction): Кеш дорои андозаи маҳдуд аст. Вақте ки он пур мешавад, унсурҳои кӯҳна ё камтар истифодашуда хориҷ карда мешаванд, то ҷой барои навҳоро холӣ кунанд. Алгоритмҳои маъмул барои хориҷ кардан LRU (Least Recently Used — камтар истифодашуда) ва LFU (Least Frequently Used — камтар истифодашуда) мебошанд.
Маслиҳат дар Android бо истифода аз LruCache:
// Эҷоди LruCache бо андозаи максималӣ
private LruCache<String, Bitmap> memoryCache;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Дастрас кардани андозаи максималии хотираи дастрас барои барнома (дар KB)
final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
// Истифодаи 1/8 аз хотираи дастрас барои кеш
final int cacheSize = maxMemory / 8;
memoryCache = new LruCache<String, Bitmap>(cacheSize) {
@Override
protected int sizeOf(String key, Bitmap bitmap) {
// Метод барои ҳисоб кардани андозаи ҳар як унсури кеш дар воҳидҳо,
// мувофиқи андозаи кеш (ин ҷо - KB)
return bitmap.getByteCount() / 1024;
}
};
}
// Илова кардани унсур ба кеш
public void addBitmapToMemoryCache(String key, Bitmap bitmap) {
if (getBitmapFromMemCache(key) == null) {
memoryCache.put(key, bitmap);
}
}
// Гирифтани унсур аз кеш
public Bitmap getBitmapFromMemCache(String key) {
return memoryCache.get(key);
}