在运行时动态生成函数以提高性能

时间:2018-10-09 22:30:10

标签: .net expression-trees

我有一个小函数,它将被频繁调用,基本上,它会检查配置值并确定要返回哪个值:

string GetKey()
{
    if (Config.UseFirstName)
    {
         return this.firstName;
    }
    else
    {
         return this.lastName;
    }
}

您可以看到,这很简单,Config.UseFirstName是一个可配置变量,在启动时会从本地配置文件中读取,一旦加载,就永远不会更改。鉴于此,我想通过删除if-else子句来提高其性能,我想在启动过程中确定GetKey变量时动态生成Config.UseFirstName函数,如果它为true,则我将生成这样的函数:

string GetKey()
{
    return this.firstName;
}

我希望通过消除布尔值的不必要检查,可以改善此功能的性能,其行为类似于Windows平台上的.DLL动态加载。 现在的问题是,.NET是否支持我的方案?我应该使用ExpressionTree吗?

1 个答案:

答案 0 :(得分:0)

声明一个函数指针

Func<string> GetKey;

在类的构造函数中

MyClass()
{
    if (Config.UseFirstName)
    {
        GetKey = () => this.firstName;
    }
    else
    {
        GetKey = () => this.lastName;
    }
}

调用GetKey现在将返回正确的属性,而不必评估Config.UseFirstName。