我使用指针和参考进行了以下简单的实验
我创建了两个函数Swap
和SwapByReference
,其代码如下: -
void Swap(int* num1, int* num2)
{
int temp = *num1 ;
*num1 = *num2 ;
*num2 = temp ;
}
void SwapByReference(ref int num1, ref int num2)
{
int temp ;
temp = num1 ;
num1 = num2 ;
num2 = temp ;
}
然后,我使用了一个List<int>
并使用for循环向其添加了1亿个值。
之后,我像这样调用了列表中的Swap
和SwapByReference
函数。
for (int i = 0; i < MaxValue - 1; i++)
{
int num1 = list1[i] ; // num1p and num2p are of type int*
// MaxValue is equal to 100 million.
// list1 is of type List<int> which contains MaxValue elements in it.
int num2 = list1[i+1] ;
num1p = &num1 ;
num2p = &num2 ;
Swap(num1p, num2p);
}
和
for (int i = 0; i < MaxValue - 1; i++)
{
int num1 = list1[i];
int num2 = list1[i + 1];
SwapByReference(ref num1, ref num2);
}
之后,我为MaxValue
的不同值运行此代码,如1亿,1千万,1百万,(有和没有优化),并注意到有关运行上述代码所花费的时间的观察,并计算对于指针和参考,不同的b / w优化和不优化的代码用于不同的MaxValue
1亿
掉期功能= 5509.6
SwapByReference函数= 5549.5
1000万
掉期功能= 553.6
SwapByReference函数= 718.6
100万
掉期功能= 37.6
SwapByReference = 56.8
所有上述观察都是以毫秒为单位,我使用System.Diagnostics.Stopwatch
来衡量时间
我的问题是,与指针相比,为什么在引用的情况下优化更多?
在这种情况下,引用有什么特别之处吗?