Сборка мусора в менеджере кэшей
Менеджер кэшей CacheManager удаляет ненужные кэши при первом вызове из последовательного кода.
Кроме того, при выходе из параллельного региона автоматически запускается сборка мусора в кэшах.
Математическое ядро предоставляет интерфейс для очистки кэшированных данных – класс MbGarbageCollection.
Класс MbGarbageCollection – это сборщик мусора в объектах типа CacheCleaner, хранящих кэшированные данные. По требованию он очищает кэши в зарегистрированных объектах.
Для того, чтобы в объекте типа CacheCleaner стала возможна сборка мусора, он должен реализовать метод ResetCacheData() для очистки кэшей и подписаться на сборку в классе MbGarbageCollection.
Класс CacheManager является производным от класса CacheCleaner, что позволяет запускать чистку кэшей в менеджере автоматически. Для этого при создании кэша для потока менеджер кэшей регистрируется в MbGarbageCollection.
Базовый класс объектов, требующих сборки мусора
Для того, чтобы подписаться на сборку мусора, класс должен наследоваться от класса CacheCleaner и реализовать метод ResetCacheData для удаления кэшированных данных.
CacheCleaner – это базовый класс для объектов, требующих сборки мусора. Он реализует методы:
void SubcribeOnCleaning() – подписаться на сборку мусора.
void UnsubcribeOnCleaning() – отписаться от сборки мусора.
Класс CacheCleaner также предоставляет метод:
bool ResetCacheData() – очистить кэшированные данные. Должен возвращать true, если кэшированные данные были очищены и объект отписан от сборки мусора.
Класс для сборки мусора MbGarbageCollection
Класс MbGarbageCollection – это сборщик мусора в объектах типа CacheCleaner, хранящих кэшированные данные. По требованию он очищает кэши в зарегистрированных объектах, вызывая метод ResetCacheData для каждого объекта.
Класс MbGarbageCollection реализует методы:
void Subscribe( CacheCleaner * obj ) – подписать объект на сборку мусора.
void Unsubscribe( CacheCleaner * obj ) – отписать объект от сборки мусора.
static bool Run( bool force = false ) – выполнить сборку мусора. Должна вызываться в последовательном участке кода. При вызове в параллельном регионе ничего не делает. Если force == false, то инициируется сборка мусора в кэшах, созданных для потоков, которые уже завершены, если force == true, то инициируется принудительная сборка мусора во всех кэшах.
static void Enable( bool allow = true ) – активировать/деактивировать сбор данных для проведения сборки мусора. По умолчанию сбор данных активирован.