Seq.cache<'T>-Funktion (F#)
Aktualisiert: August 2010
Gibt eine Sequenz zurück, die einer zwischengespeicherten Version der Eingabesequenz entspricht.
Namespace/Modulpfad: Microsoft.FSharp.Collections.Seq
Assembly: FSharp.Core (in FSharp.Core.dll)
// Signature:
Seq.cache : seq<'T> -> seq<'T>
// Usage:
Seq.cache source
Parameter
source
Typ: seq<'T>Die Eingabesequenz.
Ausnahmen
Ausnahme |
Bedingung |
---|---|
Wird ausgelöst, wenn die Eingabesequenz NULL ist. |
Rückgabewert
Die Ergebnissequenz.
Hinweise
Diese Ergebnissequenz verfügt über die gleichen Elemente wie die Eingabesequenz. Das Ergebnis kann mehrmals aufgelistet werden. Die Eingabesequenz wird höchstens einmal und nur soweit es notwendig ist aufgelistet. Das Zwischenspeichern einer Sequenz empfiehlt sich immer dann, wenn ein wiederholtes Auswerten von Elementen in der ursprünglichen Sequenz rechenintensiv ist oder das Durchlaufen der Sequenz Nebeneffekte verursacht, deren wiederholtes Auftreten nicht erwünscht ist. Sobald die Enumeration der Eingabesequenz begonnen hat, wird der Enumerator von diesem Objekt aktiv gehalten, bis die Enumeration abgeschlossen wurde. An diesem Punkt wird der Enumerator freigegeben. Der Enumerator kann verworfen und der zugrunde liegende Cachespeicher freigegeben werden, indem das zurückgegebene Sequenzobjekt in den Typ IDisposable konvertiert und die Dispose-Methode für dieses Objekt aufgerufen wird. Das Sequenzobjekt kann dann erneut aufgelistet werden, und es wird ein neuer Enumerator verwendet.
Der Name dieser Funktion in kompilierten Assemblys lautet Cache. Verwenden Sie diesen Namen, wenn Sie in einer anderen .NET-Sprache als F# oder durch Reflektion auf die Funktion zugreifen.
Beispiel
Im folgenden Codebeispiel wird veranschaulicht, wie Sie mit Seq.cache verhindern, dass die Elemente einer Sequenz neu berechnet werden.
// 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
Threadsicherheit
Die Enumeration der Ergebnissequenz ist insofern threadsicher, als dass mehrere unabhängige IEnumerator-Werte parallel von verschiedenen Threads (Zugriffe auf die interne Look-aside-Tabelle sind threadsicher) verwendet werden können. Jeder einzelne IEnumerator ist i. d. R. nicht threadsicher; daher sollte kein paralleler Zugriff darauf erfolgen.
Plattformen
Windows 7, Windows Vista SP2, Windows XP SP3, Windows XP x64 SP2, Windows Server 2008 R2, Windows Server 2008 SP2, Windows Server 2003 SP2
Versionsinformationen
F#-Runtime
Unterstützt in: 2.0, 4.0
Silverlight
Unterstützt in: 3
Siehe auch
Weitere Ressourcen
Microsoft.FSharp.Collections-Namespace (F#)
Änderungsprotokoll
Datum |
Versionsgeschichte |
Grund |
---|---|---|
August 2010 |
Codebeispiel hinzugefügt. |
Informationsergänzung. |