Compartilhar via


SEQ.cache <'T>. Função (F#)

Retorna uma seqüência que corresponde a uma versão em cache a seqüência de entrada.

Namespace/Module Path: Microsoft.FSharp.Collections.Seq

Assembly: FSharp.Core (em FSharp.Core.dll)

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

// Usage:
Seq.cache source

Parâmetros

  • source
    Tipo: seq<'T>

    a seqüência de entrada.

Exceções

Exceção

Condição

ArgumentNullException

Acionada quando a seqüência de entrada seja nulo.

Valor de retorno

A seqüência de resultado.

Comentários

Essa seqüência de resultado terá os mesmos elementos que a seqüência de entrada.o resultado pode ser enumerado várias vezes.A seqüência de entrada é enumerada no máximo uma vez e até é necessário.Armazenar em cache uma seqüência normalmente é útil quando classificar repetidamente itens na seqüência original é computacionalmente cara ou se iterar a seqüência faz com que os efeitos colaterais que o usuário não quer ser repetido várias vezes.Uma vez que a seqüência de enumeração de entrada foi iniciado, o enumerador será mantida ativa por esse objeto até que a enumeração terminar.Em esse ponto, o enumerador será descartado.O enumerador pode ser descartado e armazenamento subjacente de cache ser convertido o objeto retornado da seqüência a IDisposable, digite e chamando o método de Dispose em este objeto.O objeto da seqüência pode então ser enumerado novamente e um enumerador atualizado será usado.

Essa função é chamada Cache em assemblies compilados.Se você está acessando a função de um idioma diferente F#, ou com a reflexão, use este nome.

Exemplo

O exemplo de código demonstra como usar Seq.cache para evitar recomputing os elementos de uma seqüência.

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

Saída

  
  
  
  
  

Segurança de Segmentos

A seqüência de enumeração do resultado é segura no sentido que os valores independentes de IEnumerator de múltiplas podem ser usados simultaneamente threads diferentes (os acessos à tabela lookaside interna são thread-safe.)Cada IEnumerator individual geralmente não é thread-safe e não deve ser acessado simultaneamente.

Plataformas

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

Informações de Versão

Versões da biblioteca principal de F#

Suportado em: 2,0, 4,0, portáteis

Consulte também

Referência

Módulo de Collections.SEQ (F#)

Microsoft.FSharp.Collections Namespace (F#)