perf: 添加内存缓存

This commit is contained in:
Xu Liu 2021-11-16 20:32:51 +08:00
commit c955e8d3bf
3 changed files with 38 additions and 4 deletions

View file

@ -152,10 +152,29 @@ std::wstring EffectCache::_GetCacheFileName(const wchar_t* fileName, std::string
return fmt::format(L".\\cache\\{}_{}.{}", ConvertFileName(fileName), StrUtils::UTF8ToUTF16(hash), _SUFFIX);
}
void EffectCache::_AddToMemCache(const std::wstring& cacheFileName, const EffectDesc& desc) {
_memCache[cacheFileName] = desc;
if (_memCache.size() > _MAX_CACHE_COUNT) {
// 清理一半内存缓存
auto it = _memCache.begin();
std::advance(it, _memCache.size() / 2);
_memCache.erase(_memCache.begin(), it);
SPDLOG_LOGGER_INFO(logger, "已清理内存缓存");
}
}
bool EffectCache::Load(const wchar_t* fileName, std::string_view hash, EffectDesc& desc) {
std::wstring cacheFileName = _GetCacheFileName(fileName, hash);
auto it = _memCache.find(cacheFileName);
if (it != _memCache.end()) {
desc = it->second;
return true;
}
if (!Utils::FileExists(cacheFileName.c_str())) {
return false;
}
@ -205,6 +224,8 @@ bool EffectCache::Load(const wchar_t* fileName, std::string_view hash, EffectDes
desc = {};
return false;
}
_AddToMemCache(cacheFileName, desc);
SPDLOG_LOGGER_INFO(logger, "已读取缓存 " + StrUtils::UTF16ToUTF8(cacheFileName));
return true;
@ -280,5 +301,7 @@ void EffectCache::Save(const wchar_t* fileName, std::string_view hash, const Eff
SPDLOG_LOGGER_ERROR(logger, "保存缓存失败");
}
_AddToMemCache(cacheFileName, desc);
SPDLOG_LOGGER_INFO(logger, "已保存缓存 " + StrUtils::UTF16ToUTF8(cacheFileName));
}