Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

13.09.2014, 13:40

C# String Speicher?

Hallo,

ich wollte gerne erfahren, ob diese Anweisung n - mal einen neuen String erzeugt im Speicher oder nur einen Zeiger auf den String liefert?


C#-Quelltext

1
2
3
4
5
6
string str = null;

while(str = streamReader.ReadLine() != null)
{
    //.. Do Something
}


Was sagt ihr? wenn es eine überflüssige Frage ist, sry dafür habe das mit den Strings wieder vergessen :D

Mfg

ProgFrog

birdfreeyahoo

Alter Hase

Beiträge: 756

Wohnort: Schorndorf

Beruf: Junior Software Engineer

  • Private Nachricht senden

2

13.09.2014, 14:31

Da string ein Referenztyp ist, ist str ein Zeiger. ReadLine liefert dir auch einen solchen. Aber der Aufruf von ReadLine verursacht die Erzeugung eines Puffers für den String.
Ich nehme an sobald die Verweise ungültig werden, dürfte so ein Puffer recht bald collected werden.

Legend

Alter Hase

Beiträge: 731

Beruf: Softwareentwickler

  • Private Nachricht senden

3

13.09.2014, 14:49

Das erzeugt dir n-mal einen neuen String.
"Wir müssen uns auf unsere Kernkompetenzen konzentrieren!" - "Juhu, wir machen eine Farm auf!"

Netzwerkbibliothek von mir, C#, LGPL: https://sourceforge.net/projects/statetransmitt/

4

14.09.2014, 00:22

wer hat den jetzt recht??^^

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

NyNooNyrox

Frischling

Beiträge: 38

Wohnort: Gänserndorf

Beruf: Mechatroniker

  • Private Nachricht senden

6

17.09.2014, 05:16

Hallo,

Für mich bedeutet diese Funktion, dass ein string einmal angelegt wird und dieser solange neu befüllt wird bis es nicht mehr aus dem StreamReader zu lesen gibt.
Oder verstehe ich hier etwas falsch?

Mit freundlichen Grüßen

Meine Aussagen mögen Sarkasmus und andere nicht wirklich ernst zunehmende Dinge beinhalten.
Aus diesem Grund übernehme ich keine Haftung wenn der Elefant aus der Kühltruhe fliegt.

Toemsel

Treue Seele

Beiträge: 310

Wohnort: OÖ

Beruf: Student und Programmierer

  • Private Nachricht senden

7

17.09.2014, 05:29

Die Methode "ReadLine" erzeugt bei jedem Aufruf (sofern eine Zeile vorhanden) ein neues StringBuilder obj.
Dessen Referenz wird dann an die "str" Variable gebunden. Somit haben beide recht.

@NyNooNyrox
Es handelt sich um eine Methode, nicht um eine Funktion.

Legend

Alter Hase

Beiträge: 731

Beruf: Softwareentwickler

  • Private Nachricht senden

8

17.09.2014, 09:19

Für mich bedeutet diese Funktion, dass ein string einmal angelegt wird und dieser solange neu befüllt wird bis es nicht mehr aus dem StreamReader zu lesen gibt.
Oder verstehe ich hier etwas falsch?


C#-Quelltext

1
string info = "Hallo, ich bin übrigens als String in C# immuteable. D.h. ich kann gar nicht neu befüllt werden!";
"Wir müssen uns auf unsere Kernkompetenzen konzentrieren!" - "Juhu, wir machen eine Farm auf!"

Netzwerkbibliothek von mir, C#, LGPL: https://sourceforge.net/projects/statetransmitt/

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

9

17.09.2014, 09:27

Korrekt. Strings sind in .NET unveränderlich (immutable).
Siehe auch: http://stackoverflow.com/questions/23652…ng-is-immutable
Gleiches gilt übrigens auch für Java, Python und JavaScript.

Werbeanzeige