共用方式為


Seq.cache<'T> 函式 (F#)

傳回序列,這個序列對應至輸入序列的快取版本。

命名空間/模組路徑:Microsoft.FSharp.Collections.Seq

組件:FSharp.Core (在 FSharp.Core.dll 中)

// Signature:
Seq.cache : seq<'T> -> seq<'T>

// Usage:
Seq.cache source

參數

  • source
    型別:seq<'T>

    輸入序列。

例外狀況

例外狀況

條件

ArgumentNullException

當輸入序列為 null 時擲回。

傳回值

結果序列。

備註

這個結果序列的項目與輸入序列相同。 結果可以列舉多次。 輸入序列最多會列舉一次,而且只有在必要時才會列舉。 當重複評估原始序列中之項目的計算成本太高時,或反覆執行序列會產生使用者不想要重複多次得到的副作用時,快取序列通常很有用。 一旦啟動輸入序列的列舉後,這個物件將會保持輸入序列的列舉程式繼續運作,直到完成列舉完成為止。 此時,會處置列舉程式。 將傳回的序列物件轉換為型別 IDisposable,並在這個物件上呼叫 Dispose 方法,來處置列舉程式,以及釋出基礎快取儲存體。 然後,可能會重新列舉序列物件,以及使用全新的列舉程式。

這個函式在已編譯的組件中名為 Cache。 如果您是透過 F# 以外的語言,或是透過反映來存取函式,請使用這個名稱。

範例

下列程式碼範例示範如何使用 Seq.cache 以避免重新計算序列的項目。

// Recursive isprime function.
let isPrime n =
    let rec check i =
        i > n/2 || (n % i <> 0 && check (i + 1))
    check 2

let seqPrimes = seq { for n in 2 .. 10000 do if isPrime n then yield n }
// Cache the sequence to avoid recomputing the sequence elements.
let cachedSeq = Seq.cache seqPrimes
for index in 1..5 do
    printfn "%d is prime." (Seq.nth (Seq.length cachedSeq - index) cachedSeq)

Output

  
  
  
  
  

執行緒安全

結果序列的列舉是具備安全執行緒,因此可能會從不同的執行緒同時使用多個獨立 IEnumerator 值 (與內部對應資料表的存取具備安全執行緒)。 每個個別 IEnumerator 一般都不具備安全執行緒,因此不應該加以並行存取。

平台

Windows 8 中, Windows 7, Windows Server 2012 上, Windows Server 2008 R2

版本資訊

F# 核心程式庫版本

支援版本:2.0, 4.0,可攜式執行檔 (PE)。

請參閱

參考

Collections.Seq 模組 (F#)

Microsoft.FSharp.Collections 命名空間 (F#)