When to lazy load?

后端 未结 8 1835
庸人自扰
庸人自扰 2020-12-31 17:14

I lazy load all my members. I have been doing this for a while and simply taken lazy load to be a good thing at face value.

Let\'s say we have

publi         


        
8条回答
  •  说谎
    说谎 (楼主)
    2020-12-31 17:27

    First of all, initializing a member inside the constructor isn't lazy loading.

    Lazy Loading is initializing the member the first time it is requested. A simple example in .NET (with some double-check locking so we don't have threading issues):

    public class SomeClass
    {
        private object _lockObj = new object();
        private SomeReferenceType _someProperty;
    
        public SomeReferenceType SomeProperty
        {
            get
            {
                if(_someProperty== null)
                {
                    lock(_lockObj)
                    {
                        if(_someProperty== null)
                        {
                            _someProperty= new SomeReferenceType();
                        }
                    }
                }
                return _someProperty;
            }
            set { _someProperty = value; }
        }
    }
    

    Luckily, if you're using .NET 4, you can now user the Lazy Class which handles the issues for you and makes things a lot easier.

    Second of all, lazy loading is a good idea when you have many members that could be costly to load and you're sure that you're going to be using all of those values. That cost would cause the type to be un-necessarily slow to instantiate.

    Lazy Loading just for the sake of lazy loading is adding unnecessary complexity to your code and could cause issues down the road if done improperly (when dealing with threading, for example).

提交回复
热议问题