Compartir a través de


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

ArgumentNullException

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

Vea también

Referencia

Collections.Seq (Módulo de F#)

Microsoft.FSharp.Collections (Espacio de nombres de F#)