将列表设置为自身是否有任何性能损失?

jac*_*ack 2 c# performance list

我有一个列表,如果尚未实例化,可能为null,我想在调用GetList()时能够返回现有或创建列表然后返回.这看起来更干净:

private List<object> m_objects;
public List<object> GetList()
{
    m_objects = m_objects ?? new List<object>();
    return m_objects;
}
Run Code Online (Sandbox Code Playgroud)

但是将列表设置为自身会有性能损失,还是C#意识到这不是必需的?

替代方案是:

private List<object> m_objects;
public List<object> GetList()
{
    if(m_objects != null) 
    {
        return m_objects;
    }
    m_objects = new List<object>();
    return m_objects;
}
Run Code Online (Sandbox Code Playgroud)

显然不是世界末日,但我仍然很好奇.

Kęd*_*rzu 7

用途Lazy<T>:

private Lazy<List<object>> m_objects = new Lazy<List<object>>();
public List<object> GetList()
{
    return m_objects.Value;
}
Run Code Online (Sandbox Code Playgroud)

解决性能问题.担心这里的表现是不成熟的优化.您应首先编写代码才能正常工作,然后如果您发现任何与性能相关的问题,请对其进行分析并进行优化.

  • @PeterSchneider这里没有禁用它.我不希望它显着*更昂贵; 它根本不可能很重要,但在最坏的情况下,OP的代码执行一个多余的一个注册表值的分配,所以它的运行速度和你可能的速度一样快.我确信所有选项都足够*,但我毫不怀疑这会比其他选项更慢(减少一些边际数量). (3认同)
  • 懒惰是什么?至少包括任何参考作为答案恕我直言更好. (2认同)
  • 在这里担心性能是非常不成熟的优化. (2认同)