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
Linda Hamiltonoriginal
2025-01-27 17:41:08820parcourir

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

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>

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