无需单独优化我的代码逻辑

时间:2015-07-29 06:26:22

标签: c# .net performance singleton

 public interface IHandler
    {
        List<string> Run();
    }

public class Base 
{

    void methodA();
}

public Class Der1 : Base , IHandler
{
     List<string> Run()
     { //Generate huge records
     }
}

public Class Der2 : Base , IHandler
{
     List<string> Run()
     {//Generate huge records
     }
}

public Class Der3 : Base , IHandler
{
     List<string> Run()
     {//Generate huge records
     }
}

当前Run()正在所有派生类中执行并生成相同的记录集。我想要优化它。

将Run()内的RecordGeneration进程移动到公共类/函数并执行一次并准备必要的记录。所有Derived类都将使用此“RecordGeneration”来获取已生成的记录。

注意:我无法实现Singleton模式。

1 个答案:

答案 0 :(得分:2)

您可以使用Lazy<T>

private Lazy<List<string>> l;

public Der1
{
    l = new Lazy<List<string>>(() => Run());
}

public List<string> ResultOfRun
{
    get
    {
         return l.Value();
    }
}

要扩展我的初始答案,如果方法在所有方法中具有相同的输出,则可以执行以下操作:

public class Base
{
    private Lazy<List<string>> l =  new Lazy<List<string>>(() => RunStatic());

    private static List<string> RunStatic()
    {
        //
    }

    public List<string> ResultOfRun
    {
        get
        {
             return l.Value();
        }
    }

    void methodA();
}

然后你只需要在Run中调用它,如果它实现了接口,它可以在基类中:

public Class Der1 : Base , IHandler
{
     List<string> Run()
     {
         return this.ResultOfRun;
     }
}