打开元组或保持原样?

时间:2016-03-26 18:07:37

标签: c# performance tuples

处理Tuple的展开并使用一些变量而不是仅使用Tuple是否更快。
考虑这个例子:

Tuple<int,int> test = new Tuple<int,int>;

int numberOne = int.Parse(Console.Readline());
int numberTwo = int.Parse(Console.Readline());

test.Item1 = numberOne;
test.Item2 = numberTwo;

for(int i = 0; i < 10; i++)
{
    if(test.Item1 * i > test.Item2 * i)
    {// do stuff}
    else
    {// do stuff}
}

VS

Tuple<int,int> test = new Tuple<int,int>;

int numberOne = int.Parse(Console.Readline());
int numberTwo = int.Parse(Console.Readline());

test.Item1 = numberOne;
test.Item2 = numberTwo;

for(int i = 0; i < 1000; i ++)
{
    int tempItem1 = test.Item1;
    int tempItem2 = test.Item2;

    if(tempItem1 * i > tempItem2 * i)
    {// do stuff}
    else
    {// do stuff}
}

我还想知道用{2}变量展开Tuple是否比使用item1和item2更快。如果我们使用2个以上的变量,结果是否仍然相同?

提前致谢

1 个答案:

答案 0 :(得分:0)

两个版本都将内存中的元组项加载到临时值中。唯一的区别是它是IL执行堆栈上的临时还是实际的IL本地。通常,这应该在JIT的范围内。

如果这是一个C编译器,它将100%确定性能是相同的。任何情况都不是这样的错误。

.NET JIT的优化程序非常差,因此您可能总是不走运并进入优化器漏洞。