c 使用foreach需要知道的

2022-01-13 17:18:16 字數 1068 閱讀 9382

在c#中通過foreach遍歷乙個列表是經常拿用的方法,使用起來也方便,效能上也和for沒有多大的差別;那為什麼還要注意呢?我們先下來看下以下這句話:分配的記憶體數量和完成測試所需的時間之間有直接關係。當我們單獨檢視的時候,記憶體分配並不是非常昂貴。但是,當記憶體系統只是偶爾清理不使用的記憶體時,問題就出現了,並且問題出現的頻率和要分配的記憶體數量成正比。因此,你分配越多的記憶體,對記憶體進行垃圾**的頻率就越頻繁,你的**效能就會變得越差。

從上面那些話可以看到記憶體的**是非常損耗資源,那我們再看下一些.net內部型別的實現。

array:

// system.array

public ienumerator getenumerator()

return new array.arrayenumerator(this, lowerbound, this.length);

}

list:

// system.collections.generic.listpublic list.enumerator getenumerator()

dictionary:

// system.collections.generic.dictionarypublic dictionary.enumerator getenumerator()

從以上**來看,我們再進行foreach操作以上物件的時候都會構建乙個enumerator;也許有人會認為這點東西不需要計較,不過的確很多情況是不用關心;但如果通過記憶體分析到到的結果表明構建enumerator的數量排在前幾位,那就真的要關心一下了。很簡單的乙個應用假設你的應用要處理幾w的併發,而每次都存在幾次foreach那你就能計算出有多少物件的產生和**?看下乙個簡單的分析圖,這裡緊緊是存在乙個list'1如果元件內部每個併發多幾個foreach又會怎樣?

改成for的結果又怎樣呢

初學c ,我需要知道的事

答 源 檔案 cpp 也就是你自己編寫的 儲存後就會出現乙個.cpp檔案 目標檔案 obj 是你寫好的源 檔案經過編譯後的檔案,也就是計算機能看得懂的一大堆二進位制 可執行檔案 exe 就是目標檔案經過鏈結器和函式庫檔案 lib 鏈結後生成的檔案,可以直接執行 答 在我看來,是編譯器編譯該程式時的切...

初識C 你需要知道的那些基礎

一 命名空間 提起命名空間這個概念我們不得不提起另乙個概念 作用域。作用域 每個使用者命名的識別符號都有乙個有效的作用域,所謂的 作用域 就是指程式中的一部分,在這一部分中,該識別符號是有定義的,可以被c編譯和鏈結程式所識別。變數的作用域與其定義的語句在程式中出現的部位有直接關係。據此可以劃分為區域...

Sybase IQ,你需要知道的基礎

sybase iq,你需要知道的基礎 第一,知道iq跟其它的關係型資料庫相比,它的主要特徵是什麼?包括查詢快 資料壓縮比高 load快,但是插入更新慢,不太適合資料老是變化,它是按列儲存的。這時候你就知道它適做dss 決策支援系統 資料集市,資料倉儲,它不適合oltp。適合olap。第二,知道iq自...