.. role:: blue :class: blue Сборка мусора в менеджере кэшей =============================== .. _Garbage_collection_in_Cache_Manager: .. версия ядра: Менеджер кэшей :blue:`CacheManager` удаляет ненужные кэши при первом вызове из последовательного кода. Кроме того, при выходе из параллельного региона автоматически запускается сборка мусора в кэшах. Математическое ядро предоставляет интерфейс для очистки кэшированных данных – класс :blue:`MbGarbageCollection`. Класс :blue:`MbGarbageCollection` – это сборщик мусора в объектах типа :blue:`CacheCleaner`, хранящих кэшированные данные. По требованию он очищает кэши в зарегистрированных объектах. Для того, чтобы в объекте типа :blue:`CacheCleaner` стала возможна сборка мусора, он должен реализовать метод :blue:`ResetCacheData`\() для очистки кэшей и подписаться на сборку в классе :blue:`MbGarbageCollection`. Класс :blue:`CacheManager` является производным от класса :blue:`CacheCleaner`, что позволяет запускать чистку кэшей в менеджере автоматически. Для этого при создании кэша для потока менеджер кэшей регистрируется в :blue:`MbGarbageCollection`. Базовый класс объектов, требующих сборки мусора ----------------------------------------------- Для того, чтобы подписаться на сборку мусора, класс должен наследоваться от класса :blue:`CacheCleaner` и реализовать метод **ResetCacheData** для удаления кэшированных данных. :blue:`CacheCleaner` – это базовый класс для объектов, требующих сборки мусора. Он реализует методы: - **void SubcribeOnCleaning()** – подписаться на сборку мусора. - **void UnsubcribeOnCleaning()** – отписаться от сборки мусора. Класс :blue:`CacheCleaner` также предоставляет метод: - **bool ResetCacheData()** – очистить кэшированные данные. Должен возвращать true, если кэшированные данные были очищены и объект отписан от сборки мусора. Класс для сборки мусора MbGarbageCollection ------------------------------------------- Класс :blue:`MbGarbageCollection` – это сборщик мусора в объектах типа :blue:`CacheCleaner`, хранящих кэшированные данные. По требованию он очищает кэши в зарегистрированных объектах, вызывая метод :blue:`ResetCacheData` для каждого объекта. Класс :blue:`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 )** – активировать/деактивировать сбор данных для проведения сборки мусора. По умолчанию сбор данных активирован.