Seq.cache<'T> İşlevi (F#)
Giriş dizisine karşılık gelen önbelleğe alınmış bir dizi sürümü döndürür.
Ad alanı/modül yol: Microsoft.FSharp.Collections.Seq
Derleme: FSharp.Core (FSharp.Core.dll),
// Signature:
Seq.cache : seq<'T> -> seq<'T>
// Usage:
Seq.cache source
Parametreler
source
Türü: seq<'T>Giriş dizisi.
Özel Durumlar
Özel Durum |
Koşul |
---|---|
Giriş dizisi null olduğunda oluşturulur. |
Dönüş Değeri
Sonuç dizisi.
Notlar
Bu sonuç dizisi giriş dizisi ile aynı öğelere sahip olacaktır. Sonuç birden çok kez numaralandırılabilir. Girdi sırası en fazla bir kez ve yalnızca en gerekli olduğu gibi numaralandırılır. Özgün dizideki öğeleri tekrar tekrar değerlendirmek hesaplama açısından pahalı olduğunda veya diziyi yinelemek kullanıcının birden çok kez yinelenmesini istemediği yan etkilere neden olduğunda bir diziyi önbelleğe almak genellikle yararlıdır. Giriş sıra numaralandırma başladıktan sonra numaralandırma tamamlanıncaya kadar numaralayıcı bu nesne tarafından etkin saklanacaktır. Bu noktada, numaralandırıcı bırakılır. Numaralayıcı yazmak için döndürülen sıra nesnesi dönüştürerek serbest bırakılmış ve alttaki önbellek depolama olabilir IDisposableve Dispose yöntemi bu nesne üzerinde. Daha sonra dizi nesnesi yeniden numaralandırılabilir ve yeni bir numaralandırıcı kullanılır.
Bu işlev adlı Cache kodları derlenmiş derlemeleri. İşlev yansıtma veya F# dışındaki bir dilde erişiyorsanız, bu adı kullanın.
Örnek
Aşağıdaki kod örneği nasıl kullanılacağını göstermektedir Seq.cache bir dizi öğelerini yeniden oluşturmak önlemek için.
// 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)
Çıktı
İş parçacığı güvenliği
Sonuç sıra numaralandırma thread-safe anlam olarak, birden çok bağımsız IEnumerator değerler kullanılabilir aynı anda farklı iş parçacığından (iç arabelleğinde tablo erişimleri thread-safe). Her IEnumerator genellikle iş parçacığı güvenli değildir ve aynı anda erişilmesi gereken değil.
Platformlar
Windows 8, Windows 7, Windows Server 2012, Windows Server 2008 R2
Sürüm Bilgisi
F# Çekirdek Kitaplığı sürümleri
Desteklenen: 2.0, 4.0, Portable