MethodImplOptions.AggressiveInlining如果一个昂贵的参数没有被使用,它能阻止它被评估吗?
内联在这里没有帮助
你现在的代码是
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);
}												
											MethodImplOptions.AggressiveInlining如果一个昂贵的参数没有被使用,它能阻止它被评估吗?的更多相关文章
- C#内联函数 特性  MethodImplOptions.AggressiveInlining)
		
[MethodImpl(MethodImplOptions.AggressiveInlining)] 内联函数 Impl:implement的缩写 内联函数 在计算机科学中,内联函数(有时称作在线函数 ...
 - JavaScript中以一个方法作为参数的写法
		
前言,我们写js的时候,经常会看到一些方法,比如说: $("#ids").click(function( alert("Click me"); )); ---- ...
 - jmeter 如何将上一个请求的结果作为下一个请求的参数——使用正则提取器
		
1.简介 Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试,它最初被设计用于Web应用测试但后来扩展到其他测试领域. 它可以用于测试静态和动态资源例如 ...
 - linux中内核的一个不错的参数somaxconn
		
导读:在linux中,/proc/sys/net/core/somaxconn这个参数,linux中内核的一个不错的参数somaxconn 看下其解析: 对于一个TCP连接,Server与Client ...
 - c++中在一个类中定义另一个只有带参数构造函数的类的对象
		
c++中在一个类中定义另一个只有带参数构造函数的类的对象,编译通不过 #include<iostream> using namespace std; class A { public: ...
 - Dubbo 泛化调用的参数解析问题及一个强大的参数解析工具 PojoUtils
		
排查了3个多小时,因为一个简单的错误,发现一个强大的参数解析工具,记录一下. 背景 Nodejs 通过 tether 调用 Java Dubbo 服务.请求类的某个参数对象 EsCondition 有 ...
 - JMeter 如何把上一个请求的结果作为下一个请求的参数 —— 使用正则提取器
		
有这样一个压力测试环境,有一个上传页面,上传成功之后服务器会返回一些上传信息(比如文件的 id 或者保存路径之类的信息),然后压力机会继续下一个请求,比如调整 id 为 xx 的文件的一些信息等等.问 ...
 - SQL得到任意一个存储过程的参数列表sp_procedure_params_rowset
		
SQL得到任意一个存储过程的参数列表sp_procedure_params_rowsetexec sp_procedure_params_rowset 'up_rpt营业收入汇总表' PROCEDUR ...
 - 【转】jmeter 如何将上一个请求的结果作为下一个请求的参数——使用正则提取器
		
1.简介 Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试,它最初被设计用于Web应用测试但后来扩展到其他测试领域. 它可以用于测试静态和动态资源例如 ...
 - Tkinter Button按钮组件如何调用一个可以传入参数的函数
		
这里我们要使用python的lambda函数,lambda是创建一个匿名函数,冒号前十传入参数,后面是一个处理传入参数的单行表达式. 调用lambda函数返回表达式的结果. 首先让我们创建一个函数fu ...
 
随机推荐
- 超实用!手把手教你Dify版本升级
			
很多情况下,我们需要升级 Dify 版本以获得新的功能和性能的提升,同时还能确保系统的安全性.稳定性和兼容性,从而更好地满足用户的需求. 那问题来了,怎么升级 Dify 版本呢? 接下来,我们以 Do ...
 - 有限Abel群的结构(2)
			
版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖.如要转贴,必须注明原文网址 https://www.cnblogs.com/Colin-Cai/p/18791060.html 作者:窗户 ...
 - PHP中的多线程与异步编程常见误区
			
本文由 ChatMoney团队出品 在PHP开发中,多线程和异步编程是提高应用性能和响应速度的重要手段.然而,这些技术也带来了许多挑战和陷阱,如共享状态冲突.死锁.超时.资源泄漏以及调试困难等.本文将 ...
 - 《刚刚问世》系列初窥篇-Java+Playwright自动化测试-20- 操作鼠标拖拽 - 上篇(详细教程)
			
1.简介 本文主要介绍两个在测试过程中可能会用到的功能:在selenium中宏哥介绍了Actions类中的拖拽操作和Actions类中的划取字段操作.例如:需要在一堆log字符中随机划取一段文字,然后 ...
 - 盘古信息领航PCB产业变革:以PCB行业解决方案筑基数字化工厂
			
一.PCB 产业的数字化突围之战 在 5G 通信.人工智能与高端制造深度融合的当下,PCB 作为 "电子信息产业之基" 正面临双重变革压力:一方面,高端电子设备对高精密电路板的需求 ...
 - HashMap集合--基本操作流程的源码可视化
			
本文主要包含:HashMap 插入过程.扩容过程.查询过程和删除过程的源码可视化 文章对应的视频连接:https://www.bilibili.com/video/BV1wM3KzaE3d/ 1. 操 ...
 - 多个pdf和图片、word实现预览和下载
			
效果 代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...
 - ts类型声明
			
declare一般写在类声明/定义/描述文件xx.d.ts中,表示声明作用.可以用来声明变量(var/let/const).方法(function).命名空间(namespace).类(class). ...
 - 解锁ETLCloud中Kettle的用法
			
随着大数据时代的到来,数据的处理和管理成为各行各业不可或缺的一环.ETL(Extract-Transform-Load)工具作为数据处理的重要环节,扮演着将数据从源端抽取出来.经过转换处理,最终加载至 ...
 - Electrical(Harware) Levels: 常用电平LVTTL、LVCMOS、LVDS、CML的标准和区别
			
电平: 电压范围, VOH(V. Output High), VOL(V. O. Low), VIH(V. In H.), VIL(V. In L.) Vref: Reference Voltage参 ...