使用clear和在C#中使用ConcurrentDictionary重置对象?

时间:2018-06-16 15:55:35

标签: c# .net

我有一个这样的课。

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来刷新它,我们希望它作为一个新的干净字典,并忘记旧的价值观。

1 个答案:

答案 0 :(得分:0)

假设Load函数从某些外部源(例如,文件或数据库)读取数据,创建新的ConcurrentDictionary将完全可以忽略不计,因此实际上不应该一个问题。

每次加载时创建一个新的ConcurrentDictionary可能是更安全的方法。如果某个其他呼叫者持有对旧词典的引用,则在程序中间清除它可能会产生意外的副作用。