String Array leeren?

Norbert Eder

Erfahrenes Mitglied
Ich würde gern mal den Sourcecode von Fridulin sehen bevor ich da über irgendwas diskutiere, was ich nicht gesehen habe.

Zum Thema Garbage Collector habe ich vor kurzem einen entsprechenden Beitrag geliefert. Entweder hier im Forum danach suchen, oder in meinem Blog unter http://blog.norberteder.com/index.php?entry=entry060111-123611 zu finden.

Zum Thema Strings:

Strings sind unter .NET immutable. Das bedeutet, dass sie nicht veränderbar sind.

Man nehme das folgende Beispiel:
Code:
string muh = "muh";
muh += "kuh";
Hier sieht das ganze so aus, dass zuerst ein String-Objekt mit dem Value "muh" gebildet wird. Möchten wir an "muh" den String "kuh" anhängen passiert folgendes:

Es wird ein neues String-Objekt am Heap erzeugt. Die Größte (Länge) des String-Objektes beträgt muh.Length + "kuh".Length. Nun wird das Ergebnis aus "muh" + "kuh" in das neue String-Objekt kopiert. Das alte String-Objekt muh wird nun für die Gargabe Collection freigegeben.

Was sagt uns das jetzt? Erstens sollte wenn möglich der StringBuilder verwendet werden. Dieser zahlt sich aber erst nach ca. 7 String-Operationen aus, da die Instanzierung des StringBuilders natürlich auch Kosten verursacht.

Weiters sagt uns das, dass wir nicht wissen wie Fridulins Sourcecode aussieht und wir daher nicht beurteilen können, WARUM sein Programm stehen bleibt, oder abstürzt, oder was es auch immer (nicht) tut.

Ergo, Sourcecode her und dann kann man eine entsprechende Aussage treffen. That easy way out, dudes.
 

Norbert Eder

Erfahrenes Mitglied
Zusatz für LordDeath: String.Empty und null ist NICHT dasselbe. String.Empty repräsentiert ein "" während null ein - nun ja - null repräsentiert.

Beispiel:
Code:
string test1 = String.Empty;
string test2 = null;
Nun folgendes:
Code:
Console.WriteLine(test1); // funktioniert. Ergebnis: ""
Console.WriteLine(test2); // Ergebnis: NullReferenceException
 

MFC openGL

Erfahrenes Mitglied
Norbert Eder hat gesagt.:
Zusatz für LordDeath: String.Empty und null ist NICHT dasselbe. String.Empty repräsentiert ein "" während null ein - nun ja - null repräsentiert.

Beispiel:
Code:
string test1 = String.Empty;
string test2 = null;
Nun folgendes:
Code:
Console.WriteLine(test1); // funktioniert. Ergebnis: ""
Console.WriteLine(test2); // Ergebnis: NullReferenceException


Das war dann aber ehr für mich, denke ich ;) Aber hast recht, bei Empty ist es ""
*wieder ein wenig was gelernt hat* thx
 

Fridulin

Erfahrenes Mitglied
Hallo Leute,

ersteinmal vielen Dank für eure zahlreichen Antworten und Mühen.
Das Beispiel von MFC openGL werde ich mal Antesten und schauen ob das Funktioniert. Aber selbst wenn es funktionieren sollte, währe es trotzdem schön zu wissen ob es eventl. noch bessere Lösungen gibt.
Mein bisheriger Code:
Code:
string [] arrZeilen = new string [1000];
			
			
				
			try{
				
			status.Text = "Verusche http://www.wetter.com abzurufen. Bitte Warten.";
			System.Net.WebClient MyClient = new System.Net.WebClient();
			System.IO.Stream MyStream = MyClient.OpenRead(adresse);
			System.IO.StreamReader MyStreamReader = new System.IO.StreamReader(MyStream);
			int i = 0;
		
			
			
			
			string line;
		
			
			do
   			{
      			line = MyStreamReader.ReadLine(); 			  
     			arrZeilen[i] = line;
                                                .........
		                i++;
   			}
					   
			while (line != null);
			
    					
			}
			catch{
					
			}
Ich habe mal nach geschaut bis welcher Zeile er kommt bis es nicht mehr weiter geht.
Code:
System.IO.Stream MyStream = MyClient.OpenRead(adresse);
davor geht es nach, aber danach Arbeitet er nichteinmal mehr eine MessageBox ab. Aber wie gesagt sobald ich das Array vergrößere läuft er da öfters durch.

Viele Grüße und vielen Dank.
Fridulin
 

Norbert Eder

Erfahrenes Mitglied
Du willst den StringBuilder verwenden. Ist nämlich unklug vorzugeben, dass es 1000 Zeilen sind. Kannst du nicht wissen, ergo solltest du das dynamisch halten. Das erreichst du mit dem StringBuilder.
 

Fridulin

Erfahrenes Mitglied
Hi,

danke. Ich werde mich mal im Bezug auf den StringBuilder schlau machen. Allerdings wenn er Dynamisch immer größer wird, wird mein Programm ja ein "Speicherfresser" Die anzahl was er reinpackt ist statisch ungefähr gleich. Also mehr sollte er ja eigentlich nicht benötigen und wenn ich ihnen jetzt immer erhöhe, ist es auch nicht schön. Oder habe ich jetzt einen Gedankenfehler?

Viele Grüße und vielen Dank nocheinmal.
Fridulin
 

Norbert Eder

Erfahrenes Mitglied
Du liest ja eine Website aus. Ergo holst du dir das HTML dieser Seite. Da kannst du nie wissen wie lang das ist. Je nach Seite und Informationen unterschiedlich.

Der StringBuilder ist ja auch nur für einen bestimmten Bereich gültig. Und wenn du ihn leeren willst, dann kannst du ja Clear() verwenden.
 

Fridulin

Erfahrenes Mitglied
Nagut da hast du Recht letztendlich kann man es natürlich nie Wissen wiviel html Code ich habe. Aber das man Ihn leicht mit clear(); wieder löschen kann ist es eine perfekte Lösung.
Hast du vielleicht ein kleines Codebeispiel für mich? Ich habe schon bei MSDN geschaut und habe es nur als normalen string gefunden nicht als stringarray. Meine Versuche das umzuschreiben in ein Array siehst du hier:
Code:
StringBuilder [] arrZeilen = new StringBuilder(line);
Nur das Funktioniert ja leider nicht.

Viele Grüße und Danke für deine Hilfe
Fridulin