diff --git a/adapter/ohos/capability/preference/storage_impl.cpp b/adapter/ohos/capability/preference/storage_impl.cpp index 9b9131768ca47dbef644fb4466d20207e2498971..928b34d6bd6143396636bce39d285bd85d6552e2 100644 --- a/adapter/ohos/capability/preference/storage_impl.cpp +++ b/adapter/ohos/capability/preference/storage_impl.cpp @@ -19,7 +19,13 @@ namespace OHOS::Ace { std::shared_ptr StorageImpl::GetPreference(const std::string& fileName) { - return NativePreferences::PreferencesHelper::GetPreferences(fileName, errCode_); + auto it = preferences_.find(fileName); + if (it != preferences_.end()) { + return it->second; + } + auto pref = NativePreferences::PreferencesHelper::GetPreferences(fileName, errCode_); + preferences_.insert(std::make_pair(fileName, pref)); + return pref; } void StorageImpl::SetString(const std::string& key, const std::string& value) @@ -47,6 +53,7 @@ void StorageImpl::Clear() pref->Clear(); LOGD("StorageImpl: Clear preferences"); NativePreferences::PreferencesHelper::DeletePreferences(fileName_); + preferences_.erase(fileName_); } void StorageImpl::Delete(const std::string& key) diff --git a/adapter/ohos/capability/preference/storage_impl.h b/adapter/ohos/capability/preference/storage_impl.h index 018a48b848f465a95b7450708924726af3cc1775..109d73b9a0ee4c5c4090f333fff2f3a2e8621faa 100644 --- a/adapter/ohos/capability/preference/storage_impl.h +++ b/adapter/ohos/capability/preference/storage_impl.h @@ -58,6 +58,7 @@ private: std::shared_ptr GetPreference(const std::string& fileName); int errCode_ = 0; std::string fileName_; + std::unordered_map> preferences_; }; class StorageProxyImpl : public StorageInterface {