Kommunikation 10.07.2018, 10:47 Uhr

System.IO.Pipelines: Mehr Geschwindigkeit bei der Datenverarbeitung

Die Bibliothek sorgt für maximalen Durchsatz bei der Verarbeitung von gestreamten Daten.
Eigentlich handelt es sich bei der Bibliothek um ein Abfallprodukt: der zentrale Code sorgt dafür, dass der Webserver Kestrel maximale Leistung bringt. Das Problem mit gestreamten Daten liegt darin, dass sie gepuffert werden müssen. Ein Code wie
async Task ProcessLinesAsync(NetworkStream stream)
{
  var buffer = new byte[1024];
  await stream.ReadAsync(buffer, 0, buffer.Length);

  // Process a single line from the buffer
  ProcessLine(buffer);
}
Berücksichtigt beispielsweise nicht, dass bei einem Lesevorgang unter Umständen nicht alle Daten gelesen werden, da der Puffer sie nicht fassen kann. Sollen in der Methode ProcessLine beispielsweise aus den Stream-Daten einzelne Zeilen extrahiert werden, muss der Code auch berücksichtigen, dass eine Zeile länger sein kann als der Puffer groß ist.
Code, der all diese Anforderungen erfüllt, wird wesentlich komplexer, wie David Fowler in einem ausführlichen Blogpost zeigt.
Er führt dann System.IO.Pipelines ein und erklärt, wo der Vorteil liegt. Ein kleines Beispiel für deren Einsatz finden Sie auf GitHub.


Das könnte Sie auch interessieren