Динамическая генерация функции во время выполнения для улучшения производительности - PullRequest
0 голосов
/ 10 октября 2018

У меня есть небольшая функция, которая будет вызываться супер часто, в основном она проверяет значение конфигурации и решает, какое значение вернуть:

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

Как видите, это довольно просто, Config.UseFirstName это настраиваемая переменная, которая при запуске читает из локального файла конфигурации, после того как он будет загружен, он никогда не будет измененУчитывая это, я хочу улучшить его производительность, удалив предложение if-else, я хочу динамически генерировать функцию GetKey, если во время запуска определяется переменная Config.UseFirstName, если она истинна, тогда я сгенерирую такую ​​функцию, какэто:

string GetKey()
{
    return this.firstName;
}

Я надеюсь, что за счет устранения ненужной проверки логического значения производительность этой функции можно улучшить, ее поведение аналогично динамической загрузке .DLL на платформе Windows.Теперь вопрос в том, поддерживает ли .NET мой сценарий?Должен ли я использовать ExpressionTree?

1 Ответ

0 голосов
/ 10 октября 2018

Объявление указателя на функцию

Func<string> GetKey;

В конструкторе класса

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

Вызов GetKey теперь просто возвращает правильный атрибут без необходимости оценивать Config.UseFirstName.

...