Сборка мусора в менеджере кэшей

Менеджер кэшей 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 ) – активировать/деактивировать сбор данных для проведения сборки мусора. По умолчанию сбор данных активирован.