is和as在类型转换时的性能差异
如
public class Employee
{}public void Add(object obj)//写法一
{Employee e=null;if(obj is Employee){e=(Employee)obj;//正常处理}else{//其他处理}
}public void Add(object obj)//写法二
{Employee e=obj as Employee;if(obj==null){//其他处理}else{//正常处理}
}
上面的代码中都是将obj转换成Employee,两者在写法上都是OK的,也可以编译和运行。但是两者在性能上却有些许差别。
is操作需要判断obj的类型是不是Employee,如果是则进行强制转换e=(Employee)obj。在强制转换时,CLR又会对obj进行一次类型的判断,如果不是Employee类型,
则会抛出异常System.InvalidCastException。
as操作符,在CLR阶段会进行一次类型判断,如果是Employee,则转换为Employee类型,如果不是,则转换成null。所以这才有了写法二中的if(obj==null)的判断。
相信到这里,已经明白了这两种写法在性能上的差异。is的写法需要两次类型判断,as只需要一次类型判断。
当然,有的程序员直接是采用下面的这种写法:
public void Add(object obj)//写法三
{try{Employee e=(Employee)obj;//正常处理}catch{//其他处理throw;}
}
写法三在程序上是可行的,但是利用try--catch来捕获强制转换失败的异常,性能影响更大,不是推荐的写法。
在《CLR via C#第四版》中更倾向于写法二。
转载于:https://www.cnblogs.com/sparkleDai/p/7605001.html
is和as在类型转换时的性能差异相关推荐
- C++ - 模板函数须要类型转换时使用友元(friend)模板函数
模板函数须要类型转换时使用友元(friend)模板函数 本文地址: http://blog.csdn.net/caroline_wendy/article/details/24357301 非模板函数 ...
- c++ cstring 转换 char_【揭秘】C语言类型转换时发生了什么?
ID:技术让梦想更伟大 作者:李肖遥 [揭秘]C语言类型转换时发生了什么? 在C语言中,数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统,我们常用的算术类型包括两种类型:整数类型和浮点类型. ...
- 在c语言中出现的int错误类型,【揭秘】C语言类型转换时发生了什么?
原标题:[揭秘]C语言类型转换时发生了什么? ID:技术让梦想更伟大 作者:李肖遥 在C语言中,数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统,我们常用的算术类型包括两种类型:整数类型和浮 ...
- 需要类型转换时请为模板定义非成员函数——条款46
条款24讨论过为什么唯有non-member函数才有能力"在所有实参身上实施隐式类型转换",该条款并以Rational class的operator*函数为例.我强烈建议你继续看下 ...
- 服务器复制性能下降,使用套接字 API 程序将数据复制到 TCP 服务器时Windows性能...
使用套接字 API 程序将数据复制到 TCP 服务器时Windows性能 12/04/2020 本文内容 本文提供了使用套接字 API 程序将数据复制到 TCP 服务器时出现性能缓慢Windows解决 ...
- Mysql之count(*),count(1),count(field)区别、性能差异
目录 前言 COUNT(*)与 COUNT(1) MyISAM引擎中的COUNT(*)与 COUNT(1) Innodb引擎中的COUNT(*)与 COUNT(1) 实验 原理 结论 Count(1) ...
- DL之DNN优化技术:自定义MultiLayerNet【5*100+ReLU】对MNIST数据集训练进而比较三种权重初始值(Xavier参数初始化、He参数初始化)性能差异
DL之DNN优化技术:自定义MultiLayerNet[5*100+ReLU]对MNIST数据集训练进而比较三种权重初始值(Xavier参数初始化.He参数初始化)性能差异 导读 #思路:观察不同的权 ...
- sql in转换为join_同一个SQL语句,为啥性能差异咋就这么大呢?(1分钟系列)
<数据库允许空值,往往是悲剧的开始>一文通过explain来分析SQL的执行计划,来分析null对索引命中情况的影响,有不少朋友留言,问explain结果中的type字段,ref,ALL等 ...
- 剖析 epoll ET/LT 触发方式的性能差异误解(定性分析)
平时大家使用 epoll 时都知道其事件触发模式有默认的 level-trigger 模式和通过 EPOLLET 启用的 edge-trigger 模式两种.从 epoll 发展历史来看,它刚诞生时只 ...
- 同一个SQL语句,为啥性能差异咋就这么大呢?
墨墨导读:本文和大家说明常见的type结果及代表的含义,并且通过同一个SQL语句的性能差异,说明建对索引多么重要. explain结果中的type字段代表什么意思? MySQL的官网解释非常简洁,只用 ...
最新文章
- JSP内置对象基础知识小结
- [leetcode] Container With Most Water
- 这才是真正的男人的格局
- 【HDOJ】4358 Boring counting
- 关于redis,学会这8点就够了
- java nature_什麼是Eclipse項目的JavaEMFNature nature?
- 2016计算机视觉应用专题研究报告
- select into
- python进阶教程day_Python进阶教程m5–时间,日期
- java代码实现顺序队列
- 陕西师范大学计算机专业录取,陕西师范大学计算机类专业2016年在湖北理科高考录取最低分数线...
- PAT (Advanced Level) Practice 1001 A+B Format (20分)
- 虚拟机体验NAS私人云全揭秘:深度揭秘虚拟机安装群晖DSM6.2/6.2.1/6.2.2/6.2.3系统洗白全过程(附赠洗白码)
- sql2005数据库置疑修复断电崩溃索引损坏
- 阿里云华为云对比分析
- 中天易税服务器网站,中天易税网上报税系统
- Lync部署之Lync Mobile服务器端的外网设置
- 鼠标悬浮显示小手可抓取(CSS伪类)
- Xenu's Link Sleuth 的使用
- 大学学计算机专业高中怎样选课,高中选课大学对应专业 选什么科目能学的专业多...
热门文章
- php判断手机是安卓系统还是ios系统
- mysql jdbc 驱动 下载地址官网
- c语言有结构体的200行代码,C语言——结构体(示例代码)
- matlab红色爱心,心形图的matlab实现
- servlet的url-pattern匹配规则详细描述
- Android 系统各个版本上https的抓包
- c语言数组字节偏移,C语言数组中的地址偏移问题
- 5g组网sa方式的演进_关于5G的SA(独立组网)和NSA(非独立组网),这篇通俗易懂!
- WPS如何并排放置两张图片_Animate如何制作文字动图动画
- 7.4读写锁(ReadWriteLock)