我一直在用以下方式编写一些代码:
a1 = b1;
a2 = b2;
a3 = b3;
...
an = bn;突然,我意识到,对于我自己,以及我正在编写的当前算法(.)更令人愉快的是以下列形式写出这些作业:
(a1, a2, a3, ..., an) = (b1, b2, b3, ..., bn);现在,我想知道这种编写代码的方式对性能的影响。我认为在这里,元组的构造-解构可以通过编译器来优化。但也许不是?请注意,b1、b2、.、bn可以是值或表达式。而且,如果不能进行优化,那么n的大小将很重要(我认为)。
因此,有一个具体的问题:考虑到所有可能的细节,能否有人解释两种代码编写方法在性能上的差异?
提前谢谢。
发布于 2017-12-11 17:19:19
像这样使用,它们甚至根本就不是真正的ValueTuple,因为编译器已经把这些都去掉了。
比较和对比IL:
var a = 1;
var b = 2;
var c = 3;
var d = 4;转到
IL_0001: ldc.i4.1
IL_0002: stloc.0 // a
IL_0003: ldc.i4.2
IL_0004: stloc.1 // b
IL_0005: ldc.i4.3
IL_0006: stloc.2 // c
IL_0007: ldc.i4.4
IL_0008: stloc.3 // d和
var (a, b, c, d) = (1, 2, 3, 4);涉及:
IL_0001: ldc.i4.1
IL_0002: stloc.0 // a
IL_0003: ldc.i4.2
IL_0004: stloc.1 // b
IL_0005: ldc.i4.3
IL_0006: stloc.2 // c
IL_0007: ldc.i4.4
IL_0008: stloc.3 // d一样的。
所以..。一旦编译器实现了它的魔力,它实际上只是一个样式选择。
https://stackoverflow.com/questions/47757992
复制相似问题