技术频道导航
HTML/CSS
.NET技术
IIS技术
PHP技术
Js/JQuery
Photoshop
Fireworks
服务器技术
操作系统
网站运营

赞助商

分类目录

赞助商

最新文章

搜索

[C#技巧]C#数组矩阵for迭代,顺序不同竟然速度相差15倍

作者:admin    时间:2023-5-6 12:27:3    浏览:

在本文中,我们将做一个实验,目的是证明在C#中使用内存局部预取,是可以以获得更好的性能,即是执行速度更快。

我们将看两个例子,我们在矩阵上迭代,并计算有多少元素大于零。为简单起见,假设我们有一个数组数组,大小为 5000×5000。

 

代码 1:

for (int i = 0; i < matrix.Length; i++)
{
    for (int j = 0; j < matrix.Length; j++)
    {
        if (matrix[i][j] > 0) //行先
        {
            result++;
        }
    }
}

代码 2:

for (int i = 0; i < matrix.Length; i++)
{
    for (int j = 0; j < matrix.Length; j++)
    {
        if (matrix[j][i] > 0) //列先
        {
            result++;
        }
    }
}

你认为哪种算法会执行得更快?

如果你猜到了第一个,那你是对的。以下是我们机器上的基准测试结果:

 

但是,我们应该明白为什么会这样。

数组和矩阵(数组的数组)按顺序存储在内存中,矩阵实际上是按行优先存储的,这意味着当我们逐行访问矩阵数据时,我们将访问后续的内存位置,这就是我们如何从内存局部性原则中受益,并获得改进的性能。

相关文章

标签: asp.net  CSharp  for  代码性能  优化  
x
  • 站长推荐
/* 左侧显示文章内容目录 */