Seq.cache<'T> (Función de F#)
Devuelve una secuencia correspondiente a una versión almacenada en memoria caché de la secuencia de entrada.
Espacio de nombres/Ruta de acceso del módulo: Microsoft.FSharp.Collections.Seq
Ensamblado: FSharp.Core (en FSharp.Core.dll)
// Signature:
Seq.cache : seq<'T> -> seq<'T>
// Usage:
Seq.cache source
Parámetros
source
Tipo: seq<'T>Secuencia de entrada.
Excepciones
Excepción |
Condition |
---|---|
Se produce cuando la secuencia de entrada es NULL. |
Valor devuelto
Secuencia resultante.
Comentarios
Esta secuencia resultante tendrá los mismos elementos que la secuencia de entrada. El resultado podrá enumerarse varias veces. La secuencia de entrada se enumera como máximo una vez y solo si es necesario. Normalmente, el almacenamiento de una secuencia en memoria caché resulta útil cuando la evaluación repetida de los elementos de la secuencia original consume muchos recursos o cuando la iteración de la secuencia causa efectos secundarios cuya repetición desea evitar el usuario. Una vez que la enumeración de la secuencia de entrada se ha iniciado, este objeto mantendrá activo el enumerador hasta que la enumeración se haya completado. En ese momento, se eliminará el enumerador. Se puede eliminar el enumerador y liberar el almacenamiento en memoria caché subyacente convirtiendo el objeto de secuencia devuelto al tipo IDisposable y llamando al método Dispose. Entonces, se puede volver a enumerar el objeto de secuencia y se usará un enumerador nuevo.
Esta función se denomina Cache en los ensamblados compilados. Si obtiene acceso a la función desde un lenguaje distinto de F# o mediante reflexión, use este nombre.
Ejemplo
En el ejemplo de código siguiente se muestra cómo usar Seq.cache para evitar volver a calcular los elementos de una secuencia.
// 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
Seguridad para subprocesos
La enumeración de la secuencia resultante es segura para subprocesos ya que se pueden usar varios valores independientes de IEnumerator a la vez en diferentes subprocesos (los accesos a la tabla de almacenamiento interna son seguros para subprocesos). Los objetos IEnumerator individuales no suelen ser seguros para subprocesos y su acceso no debe realizarse simultáneamente.
Plataformas
Windows 8, Windows 7, Windows Server 2012, Windows Server 2008 R2
Información de versiones
Versiones de la biblioteca básica de F#
Se admite en: 2.0, 4.0, portables