vb if else语句 语句问题

1 Module Module1
Sub Main()
Dim i As Integer = 1
Dim s1 As String = "我是真的"
Dim s2 As String = "我不是真的"
Dim s3 As String
Dim mx As Integer =
Dim start As DateTime
For iii As Integer = 0 To 9
start = DateTime.Now
For ii As Integer = 0 To mx
If i = 0 Then
Console.WriteLine((DateTime.Now - start).TotalMilliseconds)
start = DateTime.Now
For ii As Integer = 0 To mx
s3 = If(i = 0, s1, s2)
Console.WriteLine((DateTime.Now - start).TotalMilliseconds)
start = DateTime.Now
For ii As Integer = 0 To mx
s3 = IIf(i = 0, s1, s2)
Console.WriteLine((DateTime.Now - start).TotalMilliseconds)
Console.WriteLine("--------------------------------")
36 End Module
执行结果:
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------2623.15------------------------------------------------------------------------------------------------
看结果很明显,效率上:If-Else&略大于&If(Express,SelectValue1,SelectValue2)&大于&IIf(Express,SelectValue1,SelectValue2)
这是为什么呢?
&先看全部的IL(当然也可以略去不看,下面我已经将重要片段给截取出来做了比较,提示:本题中大部分指令已在本文结尾处做了注释)
1 --- D:\Moontest\ConsoleApplication1\Module1.vb ---------------------------------
Dim i As Integer = 1
8 0000000b
edi,[ebp+FFFFFEF0h]
dword ptr es:[edi]
12 0000001a
dword ptr ds:[004B1538h],0
16 0000002a
dword ptr [ebp+FFFFFF00h],edx
dword ptr [ebp+FFFFFF04h],edx
20 0000003a
dword ptr [ebp+FFFFFEFCh],edx
dword ptr [ebp-10h],edx
dword ptr [ebp-0Ch],edx
25 0000004a
26 0000004c
dword ptr [ebp-24h],edx
27 0000004f
dword ptr [ebp-20h],edx
dword ptr [ebp-1Ch],edx
32 0000005b
dword ptr [ebp+FFFFFF6Ch],edx
dword ptr [ebp+FFFFFF68h],edx
36 0000006b
dword ptr [ebp-28h],edx
37 0000006e
dword ptr [ebp-0Ch],1
Dim s1 As String = "我是真的"
eax,dword ptr ds:[033C2194h]
40 0000007b
dword ptr [ebp+FFFFFF04h],eax
Dim s2 As String = "我不是真的"
eax,dword ptr ds:[033C2198h]
dword ptr [ebp+FFFFFF00h],eax
Dim s3 As String
Dim mx As Integer =
46 0000008d
dword ptr [ebp-10h],3B9ACA00h
Dim start As DateTime
'For iii As Integer = 0 To 9
start = DateTime.Now
ecx,[ebp+FFFFFF60h]
52 0000009a
53 0000009f
edi,[ebp-18h]
esi,[ebp+FFFFFF60h]
xmm0,mmword ptr [esi]
56 000000ac
mmword ptr [edi],xmm0
For ii As Integer = 0 To mx
eax,dword ptr [ebp-10h]
dword ptr [ebp-28h],eax
dword ptr [ebp-1Ch],edx
62 000000bb
63 000000bc
If i = 0 Then
65 000000be
dword ptr [ebp-0Ch],0
eax,dword ptr [ebp+FFFFFF04h]
69 000000ca
dword ptr [ebp+FFFFFEFCh],eax
eax,dword ptr [ebp+FFFFFF00h]
dword ptr [ebp+FFFFFEFCh],eax
78 000000df
dword ptr [ebp-1Ch],1
81 000000ea
eax,dword ptr [ebp-1Ch]
82 000000ed
eax,dword ptr [ebp-28h]
Console.WriteLine((DateTime.Now - start).TotalMilliseconds)
ecx,[ebp+FFFFFF58h]
87 000000fd
eax,[ebp+FFFFFF58h]
xmm0,mmword ptr [eax]
90 0000010a
mmword ptr [esp],xmm0
91 0000010f
eax,[ebp-18h]
xmm0,mmword ptr [eax]
mmword ptr [esp],xmm0
95 0000011e
ecx,[ebp+FFFFFF50h]
edi,[ebp+FFFFFF70h]
98 0000012f
esi,[ebp+FFFFFF50h]
xmm0,mmword ptr [esi]
mmword ptr [edi],xmm0
101 0000013d
ecx,[ebp+FFFFFF70h]
qword ptr [ebp+FFFFFF48h]
104 0000014e
qword ptr [ebp+FFFFFF48h]
qword ptr [esp]
107 0000015a
start = DateTime.Now
110 0000015f
ecx,[ebp+FFFFFF40h]
112 0000016a
edi,[ebp-18h]
113 0000016d
esi,[ebp+FFFFFF40h]
xmm0,mmword ptr [esi]
mmword ptr [edi],xmm0
For ii As Integer = 0 To mx
117 0000017b
eax,dword ptr [ebp-10h]
118 0000017e
dword ptr [ebp+FFFFFF6Ch],eax
dword ptr [ebp-20h],edx
122 0000018a
s3 = If(i = 0, s1, s2)
124 0000018c
dword ptr [ebp-0Ch],0
eax,dword ptr [ebp+FFFFFF00h]
dword ptr [ebp+FFFFFEF8h],eax
129 0000019f
eax,dword ptr [ebp+FFFFFF04h]
dword ptr [ebp+FFFFFEF8h],eax
132 000001ad
eax,dword ptr [ebp+FFFFFEF8h]
dword ptr [ebp+FFFFFEFCh],eax
dword ptr [ebp-20h],1
136 000001bd
137 000001bf
eax,dword ptr [ebp-20h]
eax,dword ptr [ebp+FFFFFF6Ch]
140 000001cd
Console.WriteLine((DateTime.Now - start).TotalMilliseconds)
142 000001cf
ecx,[ebp+FFFFFF38h]
144 000001da
eax,[ebp+FFFFFF38h]
xmm0,mmword ptr [eax]
mmword ptr [esp],xmm0
148 000001ec
eax,[ebp-18h]
149 000001ef
xmm0,mmword ptr [eax]
mmword ptr [esp],xmm0
152 000001fb
ecx,[ebp+FFFFFF30h]
edi,[ebp-30h]
esi,[ebp+FFFFFF30h]
156 0000020f
xmm0,mmword ptr [esi]
mmword ptr [edi],xmm0
ecx,[ebp-30h]
159 0000021a
160 0000021f
qword ptr [ebp+FFFFFF28h]
qword ptr [ebp+FFFFFF28h]
162 0000022b
163 0000022e
qword ptr [esp]
start = DateTime.Now
ecx,[ebp+FFFFFF20h]
168 0000023c
edi,[ebp-18h]
esi,[ebp+FFFFFF20h]
171 0000024a
xmm0,mmword ptr [esi]
172 0000024e
mmword ptr [edi],xmm0
For ii As Integer = 0 To mx
eax,dword ptr [ebp-10h]
dword ptr [ebp+FFFFFF68h],eax
176 0000025b
177 0000025d
dword ptr [ebp-24h],edx
s3 = IIf(i = 0, s1, s2)
dword ptr [ebp+FFFFFF00h]
dword ptr [ebp-0Ch],0
183 0000026d
edx,dword ptr [ebp+FFFFFF04h]
187 0000027e
dword ptr [ebp+FFFFFEF4h],eax
ecx,dword ptr [ebp+FFFFFEF4h]
189 0000028a
190 0000028f
dword ptr [ebp+FFFFFEF0h],eax
eax,dword ptr [ebp+FFFFFEF0h]
192 0000029b
dword ptr [ebp+FFFFFEFCh],eax
dword ptr [ebp-24h],1
197 000002ac
eax,dword ptr [ebp-24h]
198 000002af
eax,dword ptr [ebp+FFFFFF68h]
Console.WriteLine((DateTime.Now - start).TotalMilliseconds)
ecx,[ebp+FFFFFF18h]
202 000002bd
eax,[ebp+FFFFFF18h]
205 000002cb
xmm0,mmword ptr [eax]
206 000002cf
mmword ptr [esp],xmm0
eax,[ebp-18h]
209 000002da
xmm0,mmword ptr [eax]
210 000002de
mmword ptr [esp],xmm0
ecx,[ebp+FFFFFF10h]
213 000002ee
edi,[ebp-30h]
esi,[ebp+FFFFFF10h]
xmm0,mmword ptr [esi]
216 000002fb
mmword ptr [edi],xmm0
217 000002ff
ecx,[ebp-30h]
qword ptr [ebp+FFFFFF08h]
220 0000030d
qword ptr [ebp+FFFFFF08h]
qword ptr [esp]
Console.WriteLine("--------------------------------")
226 0000031e
ecx,dword ptr ds:[033C219Ch]
231 0000032a
esp,[ebp-8]
232 0000032d
233 0000032e
234 0000032f
对比不同点(If-Else ||&If(Express,SelecetValue1,SelectValue2) ||&IIf(Express,SelecetValue1,SelectValue2):
红色方框内的行数,影响到运行时间。&
看后我们发现,If-Else 与 If(Express,SelectValue1,SelectValue2)&实现的IL代码几乎完全一样(&If(Express,SelectValue1,SelectValue2)&IL中虽然多执行了两步操作,但是仔细看你会发现只不过是进行了多余操作)。
那么我们在执行过程时,为什么If-Else的时间略比If(Express,SelectValue1,SelectValue2)的时间大呢? 那是因为If-Else里面多了nop 指令,如果没它,If-Else&比&If(Express,SelectValue1,SelectValue2)&快。
至于&IIf(Express,SelectValue1,SelectValue2)&&那是因为里面多进行了两步call 指令,这两个过程是执行内存别处指令,执行完之后再跳转回执行下一条指令(应该是Iff有很多判断,比较复杂吧?!我没用有仔细查看内存)。
帮助信息(参阅 ):
dword ptr[ebp-0Ch] &: &取内存地址ebp-0Ch中的数据,地址ebp-0Ch中保存的是Integer i
cmp &dword ptr[ebp-0Ch]&&, & 0 & : 比较 i 和 0 【对两数进行相减,进行比较,不将两数的差放入第一个操作数,影响标志寄存器,个人认为应该影响零标识(ZF)和符号标识(SF),具体的请搜索下标志寄存器】
jne & &: & &ZF=0 , 跳转至 & &(ZF是零标识,若运算结果为零则ZF=1,否则ZF=0)
mov eax , dword ptr[ebp+FFFFFF04h] : &将操作数dword ptr[ebp+FFFFFF04h]送入eax寄存器 , 这个是什么玩意呢? &此句中的dword ptr[ebp+FFFFFF04h] 指向我们自定义的字符串
jmp 000000DF : 强制跳转至&000000DF&
: &ZF=1,跳转至 &&(参考jne)
sete cl :&取标志寄存器中ZF的值, 放到cl中
call &55EC3238 &: &调至55EC3238执行指令
movzx &ecx , cl :&ecx 高位8~32位强制为0
nop :本指令不产生任何结果,仅消耗几个时钟周期的时间,接着执行后续指令,常用于程序的延时等
阅读(...) 评论() 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
VB中利用IF语句实现分支结构
下载积分:300
内容提示:VB中利用IF语句实现分支结构 VB中利用IF语句实现分支结构 ..
文档格式:PDF|
浏览次数:224|
上传日期: 11:14:53|
文档星级:
该用户还上传了这些文档
VB中利用IF语句实现分支结构
官方公共微信VB选择语句
VB选择语句&&
IF选择(条件)语句。选择语句能使程序在执行过程中,根据不同的判断结果,选择执行不同的处理。如果条件成立的话,那么就执行语句组1的语句,否则就执行语句组2的语句。Else和它的后随语句也可以省略,那么如果条件成立,就执行语句组1,否则就直接转向执行If语句的后继语句。
&行IF条件语句的基本格式有:
条件 Then& 语句组1& Else 语句组2
条件 Then& 语句组1
&& 语句组1
④ If 条件 Then
&& 语句组1
块IF语句的基本格式如下:
IF 条件表达式1 Then
ElseIf 条件表达式2 Then
ElseIf 条件表达式n Then
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。关于VB的块IF嵌套问题_百度知道
关于VB的块IF嵌套问题
于IF的嵌套语句我一直没杂搞清楚的的,嘿嘿,到底这个语句杂用啊,回答的好我+分,最好仔细的说哈
&#39if x&0 then
'如果x=0 那么就让y=0y=0end if假如x=5程序在执行 if x&如果x&0 那么就让y=-1y=-1else '如果x&0 那么就让y=1y=1elseif x&lt
其他类似问题
为您推荐:
其他3条回答
If...Then...Else 语句
根据表达式的值有条件地执行一组语句。
If condition Then statements [Else elsestatements ]
或者,使用块形式的语法:
If condition Then
[statements]
[ElseIf condition-n Then
[elseifstatements]] . . .
[elsestatements]]
If...Then...Else 语句的语法包含以下部分:
一个或多个下面两种类型的表达式:
数值或字符串表达式,其运算结果是 True 或 False。如果 condition 是 Null,则
condition 被视为 False。
形如 TypeOf objectname Is objecttype 的表达式。objectname 是任何对象的引用,而 objecttype 则是任何有效的对...
IF嵌套就是IF里面在放一个IF,就是在一个大的IF里面放几个小的,循环判断,比较方便的一个做法
if elseend if这就行了啊
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 vb for语句 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信