C++ C++;-进程启动时加载依赖缓存
我在应用程序和/或静态库中使用了许多缓存。出于性能原因,应用程序使用的所有缓存(实现为单例)以及应用程序所依赖的各个库都需要在应用程序启动时预加载。因此,缓存加载函数调用的列表很长,很难维护—如果库中使用了新缓存,则必须将其添加到依赖于该库的每个应用程序的列表中 我考虑了一个使用自注册类的解决方案,但由于缓存位于静态库中,它们不会注册。保留一个要注册的类列表并不能达到目的,因为它会重新引入初始解决方案 接下来,我正在考虑一个涉及某种依赖关系图的解决方案,但我渴望听到您的解决方案/建议C++ C++;-进程启动时加载依赖缓存,c++,caching,C++,Caching,我在应用程序和/或静态库中使用了许多缓存。出于性能原因,应用程序使用的所有缓存(实现为单例)以及应用程序所依赖的各个库都需要在应用程序启动时预加载。因此,缓存加载函数调用的列表很长,很难维护—如果库中使用了新缓存,则必须将其添加到依赖于该库的每个应用程序的列表中 我考虑了一个使用自注册类的解决方案,但由于缓存位于静态库中,它们不会注册。保留一个要注册的类列表并不能达到目的,因为它会重新引入初始解决方案 接下来,我正在考虑一个涉及某种依赖关系图的解决方案,但我渴望听到您的解决方案/建议 加载函数是
engine::loadCaches();
extension::loadCaches();
application::loadCaches();
如果存在主库,例如engine,并且所有类型的扩展都依赖于它,那么您可以进一步在其中引入库处理接口:
namespace engine {
LibraryDelegate {
virtual void loadCaches() = 0;
}
void registerLibrary( LibraryDelegate* );
}
现在,您的项目加载例程将如下所示:
engine::registerLibrary( extensions::sharedLibraryDelegate() );
engine::registerLibrary( application::sharedLibraryDelegate() );
大致相同,但随着实现在库级别上封装,您的应用程序现在只负责将库引入引擎,其余的交互直接通过库接口进行,可以使用unloadCaches()或任何您想要的工具轻松扩展库接口