我有一个这样的课。
public class LocalizationHandler
{
private ConcurrentDictionary<string, string> _localeKeyValue;
public LocalizationHandler(DatabaseConnection dbConnection)
{
Load(dbConnection);
}
public void Load(DatabaseConnection dbConnection)
{
_localeKeyValue = new ConcurrentDictionary<string, string>();
_localeKeyValue = FetchLocale(dbConnection);
}
private static ConcurrentDictionary<string, string> FetchLocale(DatabaseConnection dbConnection)
{
// This will actually do something soon.
return new ConcurrentDictionary<string, string>();
}
}
现在,方法Load
可以在首次需要初始化并从数据库中获取区域设置时调用,但如果需要从数据库中刷新它,也可以调用它。
我的问题是,不是仅仅在构造函数中分配_localeKeyValue
并从Load
方法清除它,我最好只在每次调用Load
时分配它,或者是否有性能大打击?
是否值得在构造函数中分配它并仅在Load
内清除它?
如果我没有说清楚为什么需要清除字典,那是因为可以调用Load
来刷新它,我们希望它作为一个新的干净字典,并忘记旧的价值观。
答案 0 :(得分:0)
假设Load
函数从某些外部源(例如,文件或数据库)读取数据,创建新的ConcurrentDictionary
将完全可以忽略不计,因此实际上不应该一个问题。
每次加载时创建一个新的ConcurrentDictionary
可能是更安全的方法。如果某个其他呼叫者持有对旧词典的引用,则在程序中间清除它可能会产生意外的副作用。