共用方式為


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

更新:2010 年 8 月

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

命名空間/模組路徑: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以避免 recomputing 元素的 順序。

// 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)

輸出

            

執行緒安全

結果序列的列舉型別是安全執行緒在此情況下,多個獨立 IEnumerator值可以從不同的執行緒同時使用 (內部 lookaside 資料表的存取都是安全執行緒) 每個個別的 IEnumerator不是通常是安全執行緒,且不應該同時存取

平台

Windows 7、Windows Vista SP2、Windows XP SP3、Windows XP x64 SP2、Windows Server 2008 R2、Windows Server 2008 SP2、Windows Server 2003 SP2

版本資訊

F# 執行階段

支援版本:2.0、4.0

Silverlight

支援版本:3

請參閱

參考

Collections.Seq 模組 (F#)

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

變更記錄

日期

History

原因

2010 年 8 月

加入程式碼範例。

資訊加強。