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 |
---|---|
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. |