我正在用VB.NET 2010编写一个计算密集型程序,我希望优化速度.如果操作的结果被分配给类级变量,我发现运算符AndAlso并且OrElse异常缓慢.例如,虽然声明
a = _b AndAlso _c
_a = a
Run Code Online (Sandbox Code Playgroud)
在编译的exe中,它们之间需要大约6个机器周期,单个语句
_a = _b AndAlso _c
Run Code Online (Sandbox Code Playgroud)
大约需要80个机器周期.这里_a,_b并且_c是私有布尔变量Form1,并且所讨论的语句在实例过程中Form1,其中a是一个局部布尔变量.
我无法找到为什么单一陈述需要这么长时间.我已经使用NetReflector探索了它,直到CIL代码的水平,看起来很好:
Instruction Explanation Stack
00: ldarg.0 Push Me (ref to current inst of Form1) Me
01: ldarg.0 Push Me Me, Me
02: ldfld bool Form1::_b Pop Me, read _b and push it _b, Me
07: brfalse.s 11 Pop _b; if false, branch to 11 Me
09: ldarg.0 …Run Code Online (Sandbox Code Playgroud)