Weak Cache
Weak cache is a Map implementation that uses WeakReferences for holding
values and Finalizer to manage it's storage.
You can use this to cache data for a small amount of time until next garbage collection cycle.
Note: Values cannot be numbers, strings, booleans, records,
null,dart:ffipointers,dart:ffistructs, ordart:ffiunions.
Features
- Uses
WeakReferencefor storing values. - Uses
Finalizerto remove objects from internal storage upon their deletion. - Allows you iterate over keys/values.
While iterating, all stored values are temporarily made into strong references, to prevent concurrent edit of storage, while iterating over it.
- Optimized
containsValuevia internal managedExpando. - Implements full
Map<K, V>interface. WeakCacheitself can be safely garbage collected and doesn't hold unto any stored data.
Usage
Create cache, add values, and they'll be removed once there no more strong references to them.
// ID - Object cache
final cache = WeakCache<int, Object>();
Object? obj = Object();
cache[0] = obj;
// ...
obj = null;
// ...
// After garbage collection cache[0] will be removed.
cache[0] == null;
See example for detailed test case.
Libraries
- expando_compatible
- Utilities library.
- weak_cache
- Weak cache that uses weak references for holding values.