Maison > développement back-end > C++ > Comment le mot-clé «Rendement» fonctionne-t-il en C # pour créer des itérateurs et améliorer les performances?

Comment le mot-clé «Rendement» fonctionne-t-il en C # pour créer des itérateurs et améliorer les performances?

Linda Hamilton
Libérer: 2025-01-27 17:41:08
original
817 Les gens l'ont consulté

How Does the `yield` Keyword Work in C# to Create Iterators and Improve Performance?

C# yieldMots clés : itérateurs et optimisation des performances

Le mot-clé

yield joue un rôle essentiel en C#, qui simplifie l'implémentation des énumérateurs et la création d'itérateurs, améliorant considérablement la lisibilité et les performances du code. Examinons de plus près ses fonctionnalités.

Renvoyer les résultats étape par étape (Yielding Results)

Le mot-clé

yield permet à une méthode de suspendre son exécution et de renvoyer les résultats étape par étape. Lorsque la fonction appelante parcourt un objet qui implémente l'interface IEnumerable, la méthode contenant le mot-clé yield sera appelée à plusieurs reprises jusqu'à la fin de la séquence de retour. Ce mécanisme est appelé « céder ».

Par exemple, considérons l'extrait de code suivant :

<code class="language-csharp">IEnumerable<object> FilteredList()
{
    foreach (object item in FullList)
    {
        if (IsItemInPartialList(item))
            yield return item;
    }
}</code>
Copier après la connexion
La méthode

FilteredList() renvoie progressivement les objets de FullList en fonction des conditions. Au fur et à mesure que l'appelant parcourt les résultats, la méthode renvoie chaque correspondance une par une.

Itérateur d'implémentation (Implementing Iterators)

Le mot-clé

yield simplifie la création d'itérateurs personnalisés. Dans les versions antérieures de C#, les énumérateurs devaient être implémentés manuellement à l'aide d'objets IEnumerator. yield propose une approche plus propre et plus déclarative :

<code class="language-csharp">public IEnumerable<int> Integers()
{
    yield return 1;
    yield return 2;
    yield return 4;
    yield return 8;
    yield return 16;
    yield return 16777216;
}</code>
Copier après la connexion

Ce code renvoie une séquence d'entiers sans logique d'itération explicite.

Application pratique (Real-Life Usage)

Dans les applications pratiques, yield est souvent utilisé dans des scénarios d'évaluation paresseux, tels que la récupération de données à partir d'une base de données. Prenons l'exemple suivant :

<code class="language-csharp">public IEnumerable<T> Read<T>(string sql, Func<IDataReader, T> make, params object[] parms)
{
    using (var connection = CreateConnection())
    {
        using (var command = CreateCommand(CommandType.Text, sql, connection, parms))
        {
            command.CommandTimeout = dataBaseSettings.ReadCommandTimeout;
            using (var reader = command.ExecuteReader())
            {
                while (reader.Read())
                {
                    yield return make(reader);
                }
            }
        }
    }
}</code>
Copier après la connexion

Cette méthode construit un énumérateur, récupère les enregistrements de la table de base de données et crée un objet de type T basé sur la fonction de mappage fournie make(). En utilisant yield, cette méthode évite de charger l'ensemble des résultats en mémoire, améliorant ainsi les performances lors du traitement de grands ensembles de données.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal