Stream mit Nullen füllen
Verfasst: 11.12.2012, 22:05
Mal eine grundsätzliche Frage. Sagen wir mal, ich habe einen Stream und muss nun einen großen Block Nullen einfügen (z.B. um einen Sektor aufzufüllen).
Wäre es performanter ein Byte-Array mit der Größe anzulegen und dieses Byte-Array in den Stream zu schreiben oder ist hier eine for-Schleife mit n WriteByte-Aufrufen besser? Speziell geht es hier um C#, genauer BinaryWriter / Stream.
Ich könnte mir vorstellen, dass 1 Aufruf besser ist als viele, aber ich muss halt ein dynamisches Array anlegen, also in den Heap langen. Wobei es hier eventuell auch auf die Größe des Blocks ankommt, da somit ja auch die WriteByte-Aufrufe in der Schleife bzw. die Schleifendurchläufe ansteigen.
Vielleicht kann mir ja jemand sagen, ab wann sich was lohnt oder ob womöglich eine Variante in jedem Fall die bessere ist. Oder vielleicht sogar noch eines bessere Möglichkeit zeigen. ;)
Was mir so spontan noch einfällt, wäre ein statisches Array auf dem Stack mit einer geeigneten Größe, welches ich mehrfach in den Stream schreibe, sodass ich am Ende maximal noch StaticArraySize - 1 einzelne Bytes rausschreiben muss. Allerdings ist dann wieder die Frage wie groß so ein Array sein sollte.
Zur Info: Ich habe viele Streams / Teilstreams wo ich das ganze tun muss. Die Größe der Null-Blöcke ist mir bekannt, allerdings ist diese für jeden Stream unterschiedlich und erst zur Laufzeit bekannt.
Wäre es performanter ein Byte-Array mit der Größe anzulegen und dieses Byte-Array in den Stream zu schreiben oder ist hier eine for-Schleife mit n WriteByte-Aufrufen besser? Speziell geht es hier um C#, genauer BinaryWriter / Stream.
Ich könnte mir vorstellen, dass 1 Aufruf besser ist als viele, aber ich muss halt ein dynamisches Array anlegen, also in den Heap langen. Wobei es hier eventuell auch auf die Größe des Blocks ankommt, da somit ja auch die WriteByte-Aufrufe in der Schleife bzw. die Schleifendurchläufe ansteigen.
Vielleicht kann mir ja jemand sagen, ab wann sich was lohnt oder ob womöglich eine Variante in jedem Fall die bessere ist. Oder vielleicht sogar noch eines bessere Möglichkeit zeigen. ;)
Was mir so spontan noch einfällt, wäre ein statisches Array auf dem Stack mit einer geeigneten Größe, welches ich mehrfach in den Stream schreibe, sodass ich am Ende maximal noch StaticArraySize - 1 einzelne Bytes rausschreiben muss. Allerdings ist dann wieder die Frage wie groß so ein Array sein sollte.
Zur Info: Ich habe viele Streams / Teilstreams wo ich das ganze tun muss. Die Größe der Null-Blöcke ist mir bekannt, allerdings ist diese für jeden Stream unterschiedlich und erst zur Laufzeit bekannt.