十一长假就要过去了,今年假期没有回家,一个人闲着无聊就在看C#语言规范5.0中文版。昨天看了 is运算符和 as运算符,平时项目中也有用到这两种符号,对于其效率也没有进行比较过,趁着假期有空,先看下效率。

is 常用法:

if(obj is T)
{
T value = (T) obj;
}

先判断obj是不是T类型,如果是再进行转换。

as 常用法:

T value = obj as T;
if(value !=null)
{ }

如果obj不是T类型,value=null;如果是value=(T)obj。

expression as type 等同于expression is type ? (type)expression : (type)null 但 expression 变量仅进行一次计算。

测试例子:

class TestClass
{ } class Program
{
static Stopwatch sw_Timer = new Stopwatch();
const int NUM = 100000;
static int? TestIntType;
static TestClass testClass = new TestClass(); static void Main()
{
Console.WriteLine("值类型测试.");
sw_Timer.Restart();
for (int i = 0; i < NUM; i++)
{
object obj = i + 1;
if (obj is int)
{
TestIntType = (int?)obj1;
}
}
sw_Timer.Stop();
Console.WriteLine("Is运算{0}次所需时间,{1}Ticks.", NUM, sw_Timer.ElapsedTicks); sw_Timer.Restart();
for (int i = 0; i < NUM; i++)
{
object obj = i + 1;
TestIntType = obj as int?;
if (TestIntType != null)
{ }
}
sw_Timer.Stop();
Console.WriteLine("As运算{0}次所需时间,{1}Ticks.", NUM, sw_Timer.ElapsedTicks); Console.WriteLine("引用类型测试.");
sw_Timer.Restart();
for (int i = 0; i < NUM; i++)
{
object obj = testClass;
if (obj is TestClass)
{
TestClass objTest = (TestClass)obj;
}
}
sw_Timer.Stop();
Console.WriteLine("Is运算{0}次所需时间,{1}Ticks.", NUM, sw_Timer.ElapsedTicks); sw_Timer.Restart();
for (int i = 0; i < NUM; i++)
{
object obj = testClass;
TestClass objTest = obj as TestClass;
if (objTest != null)
{ }
}
sw_Timer.Stop();
Console.WriteLine("As运算{0}次所需时间,{1}Ticks.", NUM, sw_Timer.ElapsedTicks); Console.ReadKey();
}
}

测试结果

测试100000次,对于值类型,is>as;对于引用类型,as>is

最新文章

  1. 自定义JS控件-简单示例
  2. Java 基础【09】 日期类型
  3. Make div 100% height of browser window/设置div等于浏览器的高度
  4. ios 打包
  5. cocos2d-x 卡牌翻牌效果的实现
  6. 透明与Z序示例
  7. C# 标签打印示例 1
  8. That&#39;s life,多一些韧性,才有更多的任性(转)
  9. Ext.NET webform
  10. Godep的基本使用
  11. Spark DataFrame写入HBase的常用方式
  12. json字符串对象内嵌json对象
  13. sql 修改、更新、替换 某个字段的部分内容(转载)
  14. 在后台业务管理系统中使用Autofac实现微信接口的处理
  15. django-celery配置
  16. CS231n 第一次作业KNN中本地CIFAR10数据集的载入
  17. pytorch bug
  18. 搭建mxnet-gpu docker的pyhon remote kernel
  19. Linux和windows 查看程序、进程的依赖库的方法
  20. bitcode?

热门文章

  1. js获取当前日期一年的第几周
  2. 告诉你如何在Xcode中安装炫酷的插件!!!!!
  3. Python用Pandas读写Excel
  4. dijit/_WidgetBase
  5. Shell命令-网络操作之基础之scp、wget
  6. localStorage在不同页面之间的设置值与取值--加密 localStorage与解密localStorage
  7. GitHub密钥生成
  8. 初学JavaScript正则表达式(三)
  9. SpringCloud学习笔记(四、SpringCloud Netflix Ribbon)
  10. OpenDaylight开发hello-world项目之开发环境搭建