c# - 使用 Lazy<T> 对性能有害吗?

标签 c# .net-4.0 lazy-initialization

最近我遇到了一个 singelton 类的问题,该类懒惰地初始化字典,第二个线程会在实际填充之前尝试使用它。所以我通过 Lazy<T> 实现了变量初始化类。

这是我的代码:

private static Dictionary<string, string> GroupDefaults
{
    get { return mGroupDefaults.Value; }
}
private static Lazy<Dictionary<string, string>> mGroupDefaults =
    new Lazy<Dictionary<string,string>>(delegate
    {
        Dictionary<string, string> defaults = new Dictionary<string, string>();
        foreach (KeyValuePair<string, UnitGroup> groupDef in Groups)
            defaults.Add(groupDef.Key, groupDef.Value.First().Key);
        return defaults;
    });

这解决了问题,现在我正在考虑将其作为我的常规做法来使用 Lazy<T>在我进行延迟初始化的任何地方上课,以避免任何可能的线程问题。所以基本上我想知道这是否是好的/常见的做法?还是会对性能或其他方面产生不利影响?

最佳答案

在不知道您有什么类型的性能限制的情况下很难说,但根据我的经验,一次性初始化很少成为瓶颈(因为根据定义它只发生一次。)Lazy<T>旨在为您提供这项确切的服务,因此我建议您使用它。

关于c# - 使用 Lazy<T> 对性能有害吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11236855/

相关文章:

c# - 是否存在用于检查字符串是否为空的边缘情况?

c# - C#.NET 项目中我们真的需要 ApplicationInsights.config 文件吗?

c# - 如何更快地加载/卸载图 block block (C#)

c# - 使用 Entity Framework 时了解对象

ASP.NET Webforms 不为 Chrome/iOS 呈现回发 JavaScript 函数

.net-4.0 - 如何使用 Windows SDK 7.1 从命令行运行 msbuild?

Python 类成员延迟初始化

c# - 是否建议在 Windows 服务中运行 Visual Studio Tools for Office?

java - 延迟初始化一个由另一个延迟初始化 bean 引用的 bean

java - 如果未访问类,是否保证 static init 不运行?