C ++ - 在进程启动时加载依赖缓存

时间:2014-05-21 13:35:07

标签: c++ caching

我有许多在应用程序和/或静态库中使用的缓存。出于性能原因,应用程序使用的所有缓存(实现为单例)以及应用程序所依赖的相应库都需要在应用程序启动时预加载。因此,有一长串缓存加载函数调用难以维护 - 如果在库中使用新缓存,则必须将其添加到依赖于该库的每个应用程序的列表中。

我考虑过使用自注册类的解决方案,但鉴于缓存位于静态库中,它们不会注册。保留一个要注册的类列表会在重新引入初始解决方案时失败。

接下来我正在考虑一个涉及某种依赖关系图的解决方案,但我很想听听你的解决方案/建议。

1 个答案:

答案 0 :(得分:0)

  1. 加载函数是否采用任何参数,仅在项目级别上知道,即文件路径?
  2. 是否存在其他库所依赖的任何类型的主库?
  3. 例如,您拥有依赖于它们的引擎和扩展库以及应用程序项目。 您可以使每个库函数loadCaches(),以便您的项目的加载例程变为:

    engine::loadCaches();
    extension::loadCaches();
    application::loadCaches();
    

    如果存在主库,例如引擎,并且所有类型的扩展依赖于它,您可以进一步介绍其中的库处理接口:

    namespace engine {
       LibraryDelegate {
          virtual void loadCaches() = 0;
       }
    
       void registerLibrary( LibraryDelegate* );
    }
    

    现在您的项目加载例程将如下所示:

    engine::registerLibrary( extensions::sharedLibraryDelegate() );
    engine::registerLibrary( application::sharedLibraryDelegate() );
    

    几乎相同,但随着实现的增加封装在库级别 - 您的应用程序现在只负责引入引擎的库,其余的交互直接通过库接口,可以使用unloadCaches轻松扩展()或任何你想要的东西。