VB.NET中IIF和IF使用效率分析
一、问题描述
熟悉C/C++、C#或者Java的“*工”们,都知道存在那么个三目运算符“?:"。这个三目运算符在某种情况下可以视作精简版的"if ... else...".
例如:
if(strTemp=="Test") strTemp="Yes";
else strTemp="No";
如果使用” ?: “三目运算符后,可以用如下的方式:
strTemp=strTemp=="Test"?"Yes":"No";
so,原来的四行代码现在变成一行了,减少了代码的编写量又不影响对逻辑的理解,发明这个运算符的前辈应该是喜欢偷懒的,嘿嘿!
前不久,加入到一个VB的项目中,开始接触VB了,发现整个VB源代码像是一篇简化版的英文文章!
If strTemp="Test" ThenstrTemp="Yes"
Else strTemp="No"
End If
所以,英文好的,学习VB的效率会很高!
言归正传,VB中没有了三目运算符”?:",取而代之的是“IIf”这玩意儿。于是我就想,逻辑比较简单的“If ... Else ..."是否可以用"IIf"替换呢?
那么最简单的就是测试它们两个的性能,代码如下:
Private Sub IIfandIfTest()Dim strTest As String = "test"Dim blnTestResult As Boolean = FalseConsole.WriteLine(op_format, "Cycles", count)Dim sw As Stopwatch = Stopwatch.StartNew()For i As Int32 = 0 To countblnTestResult = IIf(strTest.Length = 0, True, False)NextConsole.WriteLine(op_format, "IIF() Method", sw.Elapsed)sw = Stopwatch.StartNew()For i As Int32 = 0 To countIf strTest.Length = 0 Then blnTestResult = True Else blnTestResult = FalseNextConsole.WriteLine(op_format, "If Method", sw.Elapsed)
End Sub
结果呢?
so,这个进化版,不对,确切说是由"?:"退化而成的"IIf()"的性能的确不怎么地啊。
当然,逻辑比较简单,循环次数不多的时候这些性能的损失还是可以容忍的,是吧!
那么,为什么会有这样的差别呢?
二、问题剖析
我们先来看看IIf()这个方法的官方说明吧:
Public Function IIf( _ByVal Expression As Boolean, _ ByVal TruePart As Object, _ ByVal FalsePart As Object _
) As Object
参数
Expression
必选。 Boolean 。要计算的表达式。
TruePart
必选。 Object 。 Expression 计算结果等于 True 时返回。
FalsePart
必选。 Object 。 Expression 计算结果等于 False 时返回。
哦,原来是这样啊,这个方法的第二、三个形参的类型都是鼎鼎大名的Object啊,我只是想要个String类型的返回值,你却给我一个Object,我还得转换,太麻烦了,远没有“If ... Else ...”来得简单啊!
所以,这个限制这个方法效率的就是这个类型的转换。
三、总结
总结一下,在程序逻辑比较简单,对性能要求不高的时候可以随意替换。但是当程序在发展的过程中逐渐变的庞大,逻辑越来越复杂的时候就会有影响了,但是到那时可能就没时间再去整理这些旁支末节却又影响深远的东西了。
[转]http://blog.csdn.net/ghjlesse/article/details/6952034
VB.NET中IIF和IF使用效率分析相关推荐
- VB表格控件总览与例程分析
一.表格控件总览: 在VB开发环境中,表格控件在界面开发元素中占有重要的地位.它不仅有外观整洁.表达形式规范的优点,而且更重要的是它较高的信息表现率(就是相对于其他控件来说能够表达更多的信息),随着信 ...
- matlab vb调用,VB程序中实现调用MATLAB的方法
收稿日期:2000207227 作者简介:王跃强(1978-),男,硕士研究生,主要研究方向:光电检测及其自动化. 文章编号:1001-9081(2001)02-0095-02 VB 程序中实现调用M ...
- Nature子刊:宏基因组中挖掘原核基因组的分析流程
宏基因组中挖掘原核基因组的分析流程 从宿主相关的短读长鸟枪宏基因组测序数据中恢复原核基因组 Recovering prokaryotic genomes from host-associated, s ...
- VB.Net中关于数组赋值
在VB.Net中增加了一个修饰Shared.Shared 关键字指示一个或多个被声明的编程元素将被共享.要点是:共享元素不关联于某类或结构的特定实例.需要通过使用类名或结构名称或者类或结构的特定实例的 ...
- 【开发环境】Ubuntu 中使用 VSCode 开发 C/C++ ⑤ ( tasks.json 中的 args 数组配置分析 | 编译并执行 C++ 程序 )
文章目录 一.tasks.json 中的 args 数组配置分析 二.编译并执行 C++ 程序 可以参考官方提供的文档 : https://code.visualstudio.com/docs/cpp ...
- 如何在VB例程中接收自定义消息
代码 如何在VB例程中接收自定义消息 您可以用API函数SetWindowLong指定处理消息的窗口过程(window procedure)为自定义的函数WindowProc,捕获消息ID为WM_U ...
- 已知三角形三边长怎么求面积_解三角形问题中的常见错解分析
解三角形问题是个难点,怎样才能突破这个难点呢? 只有正确理解三角形中的边角关系,即三角形中的边角等量关系.边角的不等关系及内角和关系,才能克服这个难点. 下面快和包sir一起对解三角形问题中的常见错误 ...
- CE5.0 - eboot汇编Startup.s中MMU设置流程详细分析
CE5.0 - eboot汇编Startup.s中MMU设置流程详细分析 以下为SMDK开发板startup.s部分启动代码. ;------------------------------- ...
- [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法
一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...
最新文章
- BZOJ3572: [Hnoi2014]世界树
- java 异步事件_处理异步事件的三种方式
- 【错误记录】Groovy 工程编译报错 ( java.lang.NoClassDefFoundError: org/apache/tools/ant/util/ReaderInputStream )
- MUI H5+ 开发app基础
- 数学(FFT):BZOJ 3527 [Zjoi2014]力
- 2019牛客暑期多校训练营(第七场)-C Governing sand
- virtualbox 安装 虚拟机的时候报错不能创建新任务
- 在Eclipse中运行JAVA代码远程操作HBase的示例
- TensorFlow入门篇(三):MNIST数据集简易分类
- mfc oracle数据库编程,testmfc - 源码下载|数据库系统|Oracle数据库|源代码 - 源码中国...
- python数据处理太慢_使用Python将数据写入LMDB非常慢
- 几何画板椭圆九种画法_几何画板怎么画椭圆 几何画板椭圆绘制教程
- PS证件照蓝底转白底红底转白底
- Flutter第一天
- 锁定td的高度_如何固定单元格的高度
- 国产芯片---超高速、高输出电流,电压反馈放大器MS8241兼容替代LM7171
- iPhone清理工具:4Easysoft iPhone Cleaner for Mac
- word2003如何删除页眉?
- Unity改变应用游戏的分辨率 resoution
- win10重装系统后连不上公司服务器,Win10电脑重装系统后不能上网怎么办?