多次引用数组中的元素并将该元素分配给变量[重复]
Posted
技术标签:
【中文标题】多次引用数组中的元素并将该元素分配给变量[重复]【英文标题】:Multiple refrences to an element in an array vs assigning that element to a variable [duplicate] 【发布时间】:2019-12-18 08:09:58 【问题描述】:如果我对数组中的同一个元素进行多次引用,在性能方面,将那个元素分配给一个变量并改为引用这个变量会更好吗?我知道这会使代码更具可读性,而且通常更重要,但要严格查看代码的性能——哪种方式更好?
public Class Example
public void ExampleOne()
//Assuming the values in the array are random.
int[,] arr = new int[10,10];
for (int i = 0; i < 10; i++)
for (int j = 0; j < 10; j++)
if(arr[i, j] < 5 || (arr[i, j] > 10 && arr[i, j] < 20))
arr[i, j] = 0;
else
arr[i, j] = 1;
public void ExampleTwo()
//Assuming the values in the array are random.
int[,] arr = new int[10,10];
int val;
for (int i = 0; i < 10; i++)
for (int j = 0; j < 10; j++)
val = arr[i, j];
if(val < 5 || (val > 10 && val < 20))
arr[i, j] = 0;
else
arr[i, j] = 1;
【问题讨论】:
【参考方案1】:我已经对您使用不同大小的数组的两种方法进行了基准测试,并且....如果数组的元素小于 640000 左右,那么第二个是最快的。否则,如果元素超过 640000 左右,则速度更快的是第一个。
static void ExampleOne()
Stopwatch stopwatch = Stopwatch.StartNew();
//Assuming the values in the array are random.
int[,] arr = new int[10, 10];
for (int i = 0; i < 10; i++)
for (int j = 0; j < 10; j++)
if (arr[i, j] < 5 || (arr[i, j] > 10 && arr[i, j] < 20))
arr[i, j] = 0;
else
arr[i, j] = 1;
Console.WriteLine(stopwatch.ElapsedTicks);
stopwatch.Stop();
static void ExampleTwo()
Stopwatch stopwatch = Stopwatch.StartNew();
//Assuming the values in the array are random.
int[,] arr = new int[10, 10];
int val;
for (int i = 0; i < 10; i++)
for (int j = 0; j < 10; j++)
val = arr[i, j];
if (val < 5 || (val > 10 && val < 20))
arr[i, j] = 0;
else
arr[i, j] = 1;
Console.WriteLine(stopwatch.ElapsedTicks);
stopwatch.Stop();
【讨论】:
很遗憾,我无法重现您的结果。我尝试对不同大小的数组进行测试以获得更好的平均值。对我来说,这两种方法花费的时间大致相同(27 因子似乎有点高),但它们并不一致。对于一个 1000x1000 的数组,它需要 300000 到 400000 个滴答声,有时一种方法比另一种更好,有时则相反。以上是关于多次引用数组中的元素并将该元素分配给变量[重复]的主要内容,如果未能解决你的问题,请参考以下文章