我有一个小函数,它将被频繁调用,基本上,它会检查配置值并确定要返回哪个值:
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吗?
答案 0 :(得分:0)
声明一个函数指针
Func<string> GetKey;
在类的构造函数中
MyClass()
{
if (Config.UseFirstName)
{
GetKey = () => this.firstName;
}
else
{
GetKey = () => this.lastName;
}
}
调用GetKey现在将返回正确的属性,而不必评估Config.UseFirstName。