处理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个以上的变量,结果是否仍然相同?
提前致谢
答案 0 :(得分:0)
两个版本都将内存中的元组项加载到临时值中。唯一的区别是它是IL执行堆栈上的临时还是实际的IL本地。通常,这应该在JIT的范围内。
如果这是一个C编译器,它将100%确定性能是相同的。任何情况都不是这样的错误。
.NET JIT的优化程序非常差,因此您可能总是不走运并进入优化器漏洞。