技術(shù)頻道導(dǎo)航
HTML/CSS
.NET技術(shù)
IIS技術(shù)
PHP技術(shù)
Js/JQuery
Photoshop
Fireworks
服務(wù)器技術(shù)
操作系統(tǒng)
網(wǎng)站運(yùn)營(yíng)

贊助商

分類目錄

贊助商

最新文章

搜索

[C#技巧]C#數(shù)組矩陣for迭代,順序不同竟然速度相差15倍

作者:admin    時(shí)間:2023-5-6 12:27:3    瀏覽:

在本文中,我們將做一個(gè)實(shí)驗(yàn),目的是證明在C#中使用內(nèi)存局部預(yù)取,是可以以獲得更好的性能,即是執(zhí)行速度更快。

我們將看兩個(gè)例子,我們?cè)诰仃嚿系?,并?jì)算有多少元素大于零。為簡(jiǎn)單起見(jiàn),假設(shè)我們有一個(gè)數(shù)組數(shù)組,大小為 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++;
        }
    }
}

你認(rèn)為哪種算法會(huì)執(zhí)行得更快?

如果你猜到了第一個(gè),那你是對(duì)的。以下是我們機(jī)器上的基準(zhǔn)測(cè)試結(jié)果:

 

但是,我們應(yīng)該明白為什么會(huì)這樣。

數(shù)組和矩陣(數(shù)組的數(shù)組)按順序存儲(chǔ)在內(nèi)存中,矩陣實(shí)際上是按行優(yōu)先存儲(chǔ)的,這意味著當(dāng)我們逐行訪問(wèn)矩陣數(shù)據(jù)時(shí),我們將訪問(wèn)后續(xù)的內(nèi)存位置,這就是我們?nèi)绾螐膬?nèi)存局部性原則中受益,并獲得改進(jìn)的性能。

相關(guān)文章

標(biāo)簽: asp.net  CSharp  for  代碼性能  優(yōu)化  
x
  • 站長(zhǎng)推薦
/* 左側(cè)顯示文章內(nèi)容目錄 */