Wenn Sie einen Stream auf den Anfang zurücksetzen müssen (z. B. MemoryStream
), empfiehlt es sich, ihn zu verwenden
stream.Seek(0, SeekOrigin.Begin);
oder
stream.Position = 0;
Ich habe gesehen, dass beide gut funktionieren, habe mich aber gefragt, ob einer korrekter ist als der andere?
stream.Position = 0;
aber ich muss @jgauffin zustimmen, wählen Sie einfach die am besten lesbare, beide Lösungen funktionieren gut.Antworten:
Verwenden Sie Position, wenn Sie eine absolute Position festlegen, und Suchen Sie, wenn Sie eine relative Position festlegen. Beide werden zur Vereinfachung bereitgestellt, sodass Sie eine auswählen können, die dem Stil und der Lesbarkeit Ihres Codes entspricht. Für den Zugriff auf Position muss der Stream durchsuchbar sein, damit er sicher austauschbar ist.
quelle
stream.Position += 10;
scheint mir ziemlich lesbar.Sie können sich den Quellcode für beide Methoden ansehen, um Folgendes herauszufinden:
https://referencesource.microsoft.com/#mscorlib/system/io/memorystream.cs,320
https://referencesource.microsoft.com/#mscorlib/system/io/memorystream.cs482
Die Kosten sind nahezu identisch (3 ifs und einige Arithmetik). Dies gilt jedoch nur für das Springen zu absoluten Offsets wie
Position = 0
und nicht zu relativen Offsets wiePosition += 0
. In diesem Fall scheint Seek etwas besser zu sein.Sie sollten jedoch bedenken, dass es sich um die Leistung einer Handvoll ganzzahliger Atirthmetiken und Ifs-Checks handelt, die mit Benchmarking-Methoden nicht einmal genau messbar sind. Wie andere bereits betont haben, gibt es keinen signifikanten / nachweisbaren Unterschied.
quelle