有两个逻辑条件:比较逻辑条件
A. (Ls != Ec && Ls != Uc && Ls != Rfc)
B. (!(Ls==Ec || Ls == Uc || Ls == Rfc))
变量是LS,EC,UC,RFC(整数)
我发现,这两个条件在逻辑上是一样的。
我的问题/ s是(有!):
是否有任何在线工具/网络检查多个/两个逻辑条件? 而性能明智哪一个更好一般或与C#.NET 3.5相关
谢谢。
有两个逻辑条件:比较逻辑条件
A. (Ls != Ec && Ls != Uc && Ls != Rfc)
B. (!(Ls==Ec || Ls == Uc || Ls == Rfc))
变量是LS,EC,UC,RFC(整数)
我发现,这两个条件在逻辑上是一样的。
我的问题/ s是(有!):
是否有任何在线工具/网络检查多个/两个逻辑条件? 而性能明智哪一个更好一般或与C#.NET 3.5相关
谢谢。
什么在线,我知道,但学习和应用De Morgan's Laws和Truth Tables会让你在那里yoruself。
有句话说“先让它工作,然后快点!”。我假设两个版本之间的差异(如果存在的话)不会影响应用程序的整体性能 - 至少在99.99%的所有应用程序中。如果你的应用程序是其余的0.001%,那么你正在编写非常特殊和复杂的高速软件。在这种情况下,你不应该使用理论工具。在真实的现场条件下测量!
C#编译器似乎为两个代码(包括调试版本和发行版本)都生成相同的IL。因此,两者之间一定不存在性能差异。实际上,根据IL,C#编译器将TestTwo转换为TestOne。当你在Reflector中看到已编译的dll时,TestTwo成为TestOne。
我编译了下面的代码,并在ILDASM中打开它们。
public bool TestOne(int l, int e, int u, int r)
{
return (l != e && l != u && l != r);
}
public bool TestTwo(int l, int e, int u, int r)
{
return (!(l == e || l == u || l == r));
}
以下是我在ILDASM(基于发布版本)中看到的内容。
.method public hidebysig instance bool TestOne(int32 l,
int32 e,
int32 u,
int32 r) cil managed
{
// Code size 19 (0x13)
.maxstack 8
IL_0000: ldarg.1
IL_0001: ldarg.2
IL_0002: beq.s IL_0011
IL_0004: ldarg.1
IL_0005: ldarg.3
IL_0006: beq.s IL_0011
IL_0008: ldarg.1
IL_0009: ldarg.s r
IL_000b: ceq
IL_000d: ldc.i4.0
IL_000e: ceq
IL_0010: ret
IL_0011: ldc.i4.0
IL_0012: ret
} // end of method Program::TestOne
.method public hidebysig instance bool TestTwo(int32 l,
int32 e,
int32 u,
int32 r) cil managed
{
// Code size 19 (0x13)
.maxstack 8
IL_0000: ldarg.1
IL_0001: ldarg.2
IL_0002: beq.s IL_0011
IL_0004: ldarg.1
IL_0005: ldarg.3
IL_0006: beq.s IL_0011
IL_0008: ldarg.1
IL_0009: ldarg.s r
IL_000b: ceq
IL_000d: ldc.i4.0
IL_000e: ceq
IL_0010: ret
IL_0011: ldc.i4.0
IL_0012: ret
} // end of method Program::TestTwo
我用VS2008 SP1(.NET 3.5 SP1)来测试这段代码。
我相信这是依赖于实现...
在基于.Net平台,从我记得,使用& &操作时,表达被从左向右计算的,如果左操作数是假的,正确的一个甚至没有评估。按照这个逻辑,我觉得选项A是一个选择的选项,如果其中一个最左边的操作数变成错误的话,选项A会更快。我想这可能是为什么IL生成更倾向于使用TestOne方法(顺便提一下,很好的想法推断出什么是选择的路径,谢谢Chansik Im。
您已经发现了De Morgan的定理http:// en .wikipedia.org/wiki/ Demorgan%27s_theorem – IanGilham 2011-04-13 16:10:09
@Everyone我知道它的愚蠢问题,也没有制作任何高端应用程序,但只是想知道任何性能差异存在与否 – Pratik 2011-04-13 16:14:34