Udostępnij za pośrednictwem


Seq.cache<'T> — Funkcja (F#)

Zwraca odpowiadający sekwencji buforowaną wersję sekwencji wejściowych.

Ścieżka obszaru nazw/modułu: Microsoft.FSharp.Collections.Seq

Zgromadzenie: FSharp.Core (w FSharp.Core.dll)

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

// Usage:
Seq.cache source

Parametry

  • source
    Typ: seq<'T>

    Sekwencji wejściowych.

Wyjątki

Wyjątek

Warunek

ArgumentNullException

Zgłoszony podczas sekwencji wejściowych jest null.

Wartość zwracana

Sekwencja wynik.

Uwagi

Ta sekwencja wynik będzie miał takie same elementy jako sekwencji wejściowych.Wynik można wyliczyć wiele razy.Sekwencji wejściowych jest wyliczany najwyżej raz i tylko tak dalece jak to jest konieczne.Buforowanie sekwencji jest zazwyczaj przydatny, gdy wielokrotnie ocena elementów w oryginalnej kolejności jest kosztowne w praktyce lub jeśli Iterowanie sekwencji powoduje skutków ubocznych, użytkownik nie chce być powtarzane wielokrotnie.Po rozpoczęciu wyliczenie sekwencji wejściowych, jego moduł wyliczający będą przechowywane aktywnego przez ten obiekt aż Wyliczanie zostało zakończone.W tym punkcie modułu wyliczającego zostaną usunięte.Moduł wyliczający może być pamięć podręczna zlikwidowany i podstawowej, wydany przez przekonwertowanie obiektu sekwencji zwracane do wpisz IDisposablei wywoływanie Dispose metody dla tego obiektu.Obiekt sekwencji może następnie zostać wyliczone i świeże modułu wyliczającego będą używane.

Ta funkcja o nazwie Cache w skompilowane zestawy.Jeżeli języka, niż F# lub przez odbicie, uzyskują dostęp do funkcji, należy użyć tej nazwy.

Przykład

Poniższy kod demonstruje, jak używać Seq.cache w celu uniknięcia recomputing elementów sekwencji.

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

Dane wyjściowe

  
  
  
  
  

Bezpieczeństwo wątków

Wyliczanie sekwencji wynik jest wielowątkowość w tym sensie, że wiele niezależnych od IEnumerator jednocześnie używane wartości z różnych wątków (dostępów do tabeli lookaside wewnętrznego są bezpieczne wątek).Poszczególne IEnumerator nie jest zazwyczaj wielowątkowość i nie powinny być jednocześnie dostęp.

Platformy

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

Informacje o wersji

F# Core wersji biblioteki

Obsługiwane: 2.0, 4.0, przenośne

Zobacz też

Informacje

Collections.Seq — Moduł (F#)

Microsoft.FSharp.Collections — Przestrzeń nazw (F#)