首页 > 其他分享 >MethodImplOptions.AggressiveInlining如果一个昂贵的参数没有被使用,它能阻止它被评估吗?

MethodImplOptions.AggressiveInlining如果一个昂贵的参数没有被使用,它能阻止它被评估吗?

时间:2022-12-15 23:55:25浏览次数:35  
标签:AggressiveInlining Console Log logLevel void SlowFunction 昂贵 message MethodImplO

内联在这里没有帮助

你现在的代码是

void Log(string message, LogLevel logLevel) {
    if (logLevel >= chosenLogLevel)
        Console.WriteLine(message);
}

void Foo()
{
    Log(SlowFunction(), someLogLevel);
}

内联后变为:

void Foo()
{
    var message = SlowFunction();
    var logLevel = someLogLevel;
    if (logLevel >= chosenLogLevel)
        Console.WriteLine(message);
}

logLevel可以进一步内联,但根据定义,必须在检查之前调用SlowFunction()


避免这种情况的一种方法是将message传递为Func<string>

void Log(Func<string> message, LogLevel logLevel) {
    if (logLevel >= chosenLogLevel)
        Console.WriteLine(message());
}

void Foo()
{
    Log(SlowFunction, someLogLevel);
}

标签:AggressiveInlining,Console,Log,logLevel,void,SlowFunction,昂贵,message,MethodImplO
From: https://www.cnblogs.com/chinasoft/p/16986281.html

相关文章

  • 昂贵的质量
    “Toerrishuman”在过去相当长一段时间内我都在一个负责进行项目维护的团队内工作。团队的特殊之处在于我们从来不开发新功能而是负责解决每天上报的线上问题。这些bug......
  • [POJ1062]昂贵的聘礼题解
    [POJ1062]昂贵的聘礼题目链接【题目大意】现有n个物品,每个物品价格为vi,同时可以用其他物品减免价格(当然,你必须拥有该物品).问如何购买可以使得到物品1的花费最少.此外,还......
  • 昂贵的聘礼
    题目链接  因为买一个物品可以有一些替代品来让原先的价格降低,所以可以考虑将每一件物品看成一个点,然后将所有能够替代的物品和此物品连边,物品的价格就作为边权,现在我们......