Hallo nuckey,
ok, so kann ich es schon besser lesen (und vergleichen

).
Die 1. Variante ist jedenfalls Unsinn, d.h. das Erzeugen eines StringBuilders, nur um dessen Wert wieder auszulesen (die ersten drei Zeilen des Codes).
Gleiches gilt dann für die 2. Variante (mit 'txt3' innerhalb deiner Schleife).
Daher ist nur die 3. Variante zu empfehlen!
Ein StringBuilder lohnt sich (performance-technisch) nur, wenn du viele String-Additionen (Konkatenationen) durchführst, benötigt aber (temporär) eben ein bißchen mehr Speicher.
Ab .NET 4 gibt es auch die
StringBuilder.Clear()-Methode, um innerhalb einer (äußeren) Schleife nicht immer wieder eine neue StringBuilder-Instanz erzeugen zu müssen (bzw. dessen Length-Eigenschaft auf 0 zu setzen).
Du kannst dir ja mal testweise die Eigenschaften 'Length' und 'Capacity' innerhalb der StringBuilder-Schleife ausgeben lassen (um den Unterschied zu sehen).