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>輸入序列。
例外狀況
例外狀況 |
條件 |
---|---|
當輸入序列為 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
請參閱
參考
Microsoft.FSharp.Collections 命名空間 (F#)
變更記錄
日期 |
History |
原因 |
---|---|---|
2010 年 8 月 |
加入程式碼範例。 |
資訊加強。 |