Seq.cache<'T>, fonction (F#)
Retourne une séquence qui correspond à une version mise en cache de la séquence d'entrée.
Espace de noms/Chemin du module : Microsoft.FSharp.Collections.Seq
Assembly : FSharp.Core (in FSharp.Core.dll)
// Signature:
Seq.cache : seq<'T> -> seq<'T>
// Usage:
Seq.cache source
Paramètres
source
Type : seq<'T>Séquence d'entrée.
Exceptions
Exception |
Condition |
---|---|
Levée lorsque la séquence d'entrée a la valeur Null. |
Valeur de retour
Séquence de résultat.
Notes
Cette séquence de résultat aura les mêmes éléments que la séquence d'entrée. Le résultat peut être énuméré plusieurs fois. La séquence d'entrée est énumérée au plus une seule fois et uniquement si cela est nécessaire. La mise en cache d'une séquence est généralement utile lorsque l'évaluation répétée des éléments dans la séquence d'origine sollicite fortement les ressources informatiques ou si l'itération de la séquence provoque des effets secondaires que l'utilisateur ne veut pas voir se reproduire. Une fois que l'énumération de la séquence d'entrée a démarré, son énumérateur est maintenu actif par cet objet jusqu'à ce que l'énumération soit terminée. À ce stade, l'énumérateur sera supprimé. L'énumérateur peut être supprimé et le stockage de cache sous-jacent libéré en convertissant l'objet de séquence retourné en type IDisposable, et en appelant la méthode Dispose sur cet objet. L'objet de séquence peut ensuite être à nouveau énuméré et un nouvel énumérateur est utilisé.
Cette fonction se nomme Cache dans les assemblys compilés. Si vous accédez à la fonction à partir d'un langage autre que F# ou par réflexion, utilisez ce nom.
Exemple
L'exemple de code suivant montre comment utiliser Seq.cache pour éviter de recalculer des éléments d'une séquence.
// 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)
Sortie
Sécurité des threads
L'énumération de la séquence de résultat est thread-safe dans le sens où plusieurs valeurs IEnumerator indépendantes peuvent être utilisées simultanément à partir de threads différents (les accès à la lookaside table (LAT) interne sont thread-safe). Les IEnumerator individuels ne sont généralement pas thread-safe et ne doivent pas être accessibles simultanément.
Plateformes
Windows 7, Windows Vista SP2, Windows XP SP3, Windows XP x64 SP2, Windows Server 2008 R2, Windows Server 2008 SP2, Windows Server 2003 SP2
Informations de version
Runtime F#
Pris en charge dans : 2.0, 4.0
Silverlight
Prise en charge dans : 3
Voir aussi
Référence
Microsoft.FSharp.Collections, espace de noms (F#)
Historique des modifications
Date |
Historique |
Motif |
---|---|---|
Août 2010 |
Ajout d'un exemple de code |
Améliorations apportées aux informations. |