Schulung
Modul
Ausführen von Vorgängen auf Arrays mithilfe von Hilfsmethoden in C# - Training
Verwenden Sie C#-Hilfsmethoden, um Reverse-, Resize-, Split- und Join-Vorgänge für Arrays auszuführen.
Dieser Browser wird nicht mehr unterstützt.
Führen Sie ein Upgrade auf Microsoft Edge aus, um die neuesten Funktionen, Sicherheitsupdates und technischen Support zu nutzen.
Bei fehlender Sorgfalt kann es in bestimmten Situationen dazu kommen, dass die Auflistungen in Ihren Abfragen vorzeitig materialisiert werden, wodurch sich das Speicher- und Leistungsprofil Ihrer Anwendung radikal ändert. Einige Standardabfrageoperatoren verursachen die Materialisierung ihrer Quellauflistung, bevor auch nur ein einziges Element zurückgegeben wird. So durchläuft beispielsweise Enumerable.OrderBy zuerst die gesamte Quellauflistung, sortiert dann alle Elemente und gibt zum Schluss das erste Element zurück. Das bedeutet, dass es zwar aufwendig ist, das erste Element einer sortierten Auflistung abzurufen, das Abrufen aller folgenden Elemente hingegen ist nicht aufwendig. Dies ist sinnvoll, denn anders würde dieser Abfrageoperator nicht funktionieren.
In diesem Beispiel wird das Beispiel in Chain-Abfragen (C#) geändert: Die AppendString
Methode wird so geändert, dass sie ToList aufruft, bevor sie die Quelle durchläuft, was zu Materialisierung führt.
public static class LocalExtensions
{
public static IEnumerable<string>
ConvertCollectionToUpperCase(this IEnumerable<string> source)
{
foreach (string str in source)
{
Console.WriteLine("ToUpper: source >{0}<", str);
yield return str.ToUpper();
}
}
public static IEnumerable<string>
AppendString(this IEnumerable<string> source, string stringToAppend)
{
// the following statement materializes the source collection in a List<T>
// before iterating through it
foreach (string str in source.ToList())
{
Console.WriteLine("AppendString: source >{0}<", str);
yield return str + stringToAppend;
}
}
}
class Program
{
static void Main(string[] args)
{
string[] stringArray = { "abc", "def", "ghi" };
IEnumerable<string> q1 =
from s in stringArray.ConvertCollectionToUpperCase()
select s;
IEnumerable<string> q2 =
from s in q1.AppendString("!!!")
select s;
foreach (string str in q2)
{
Console.WriteLine("Main: str >{0}<", str);
Console.WriteLine();
}
}
}
Dieses Beispiel erzeugt die folgende Ausgabe:
ToUpper: source >abc<
ToUpper: source >def<
ToUpper: source >ghi<
AppendString: source >ABC<
Main: str >ABC!!!<
AppendString: source >DEF<
Main: str >DEF!!!<
AppendString: source >GHI<
Main: str >GHI!!!<
Diesem Beispiel können Sie entnehmen, dass der Aufruf von ToListAppendString
dazu veranlasst, vor der Rückgabe des ersten Elements seine gesamte Quelle aufzulisten. Wenn die Quelle ein großes Array wäre, würde dies das Arbeitsspeicherprofil der Anwendung deutlich verändern.
Standardabfrageoperatoren können auch miteinander verkettet werden, wie im letzten Artikel in diesem Tutorial gezeigt:
Feedback zu .NET
.NET ist ein Open Source-Projekt. Wählen Sie einen Link aus, um Feedback zu geben:
Schulung
Modul
Ausführen von Vorgängen auf Arrays mithilfe von Hilfsmethoden in C# - Training
Verwenden Sie C#-Hilfsmethoden, um Reverse-, Resize-, Split- und Join-Vorgänge für Arrays auszuführen.
Dokumentation
Verzögerte Ausführung und Auswertung – LINQ to XML - .NET
Lernen Sie die Vorteile und Anforderungen der verzögerten Ausführung kennen und erfahren Sie, wie Sie sie mithilfe von Abfrage- und Achsenvorgängen implementieren.
Verketten von Standardabfrageoperatoren (C#) - LINQ to XML - .NET
Erfahren Sie, wie Sie Abfrageoperatoren miteinander verketten.
Chain-Abfragen (Beispiel) (C#) – LINQ to XML - .NET
Sehen Sie, was passiert, wenn Sie zwei Abfragen miteinander verketten, die beide mit verzögerter Ausführung und verzögerter Auswertung arbeiten.