Compartilhar via


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

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

Caminho do namespace/módulo: 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

Lançada quando a seqüência de entrada é nula.

Valor de retorno

A seqüência de resultado.

Comentários

Essa seqüência de resultado terá os mesmos elementos de uma seqüência de entrada. O resultado pode ser enumerado várias vezes. A seqüência de entrada é enumerada no máximo uma vez e apenas no que diz quantos forem necessários. Uma seqüência de cache é normalmente útil quando repetidamente, avaliar os itens na seqüência original for computacionalmente caro ou se a seqüência de iteração causa efeitos colaterais que o usuário não deseja ser repetido várias vezes. Após o início de enumeração da seqüência de entrada, sua enumerador será mantido ativo por este objeto até que a enumeração foi concluída. Nesse ponto, o enumerador será descartado. O enumerador pode ser o armazenamento em cache de descartado e subjacentes lançado pela conversão do objeto retornado seqüência digitar IDisposablee chamar o Dispose método neste objeto. O objeto de seqüência pode ser enumerado novamente e um enumerador de zero será usado.

Esta função é chamada de Cache em módulos (assemblies) compilados. Se você estiver acessando a função de um idioma diferente, por exemplo, F# ou através de reflexão, use esse nome.

Exemplo

O exemplo de código a seguir demonstra como usar Seq.cache para evitar a recomputing de 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

            

Acesso thread-safe

A enumeração da seqüência de resultado é thread-safe no sentido de que independente de vários IEnumerator valores podem ser usados simultaneamente de diversos threads (acessos à tabela lookaside internos são thread-safe). Cada indivíduo IEnumerator não é normalmente o thread-safe e não devem ser acessados simultaneamente.

Plataformas

O Windows 7, SP2 do Windows Vista, Windows XP SP3, Windows XP Professional x64 SP2, Windows Server 2008 R2, Windows Server 2008 SP2, Windows Server 2003 SP2

Informações sobre versão

O tempo de execução F#

Compatível com: 2.0, 4.0

Silverlight

Compatível com: 3

Consulte também

Referência

Módulo de Collections.SEQ (F#)

Microsoft.FSharp.Collections Namespace (F#)

Histórico de alterações

Date

History

Motivo

Agosto de 2010

Exemplo de código adicionado.

Aprimoramento de informações.