Entwickler-Ecke
Basistechnologien - Speicher Alloc. von strings in switchblock
Nuckey - Mo 30.05.11 18:24
Titel: Speicher Alloc. von strings in switchblock
also Frage: wie intelligent verwaltet C# string o. Zeichenketten in switchblöcken.
folgendes beispiel.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| static public void TestFnc(string txt) {
switch(txt) { case "test0": break; case "test1": break; case "test2": break; } } |
werden die strings hier nur einmal im speicher erzeugt oder wird jedesmal beim aufruf der methode die strings neu generiert zb.: aufn stack ?
und wäre hier statische oder const. strings besser ?
mfg nuckey
Moderiert von
Christian S.: Code- durch C#-Tags ersetzt
Ralf Jansen - Mo 30.05.11 19:16
| Zitat: |
| werden die strings hier nur einmal im speicher erzeugt oder wird jedesmal beim aufruf der methode die strings neu generiert zb.: aufn stack ? |
Aufgrund des
string interning [
http://msdn.microsoft.com/de-de/library/z5th00wc(v=VS.100).aspx] gibt es jeden String eigentlich nur einmal. Die Frage erübrigt sich dann eigentlich.
| Zitat: |
| und wäre hier statische oder const. strings besser ? |
An dieser Stelle sind nur Konstanten erlaubt. Ist daher egal wo du denn herholst macht im CIL keinen Unterschied. Orientier dich also bei deiner Wahl an Lesbarkeit und nicht an irgendeiner theoretischen Optimierbarkeit.
Nuckey - Mo 30.05.11 19:32
danke ralf ,habe dehn link kurz überflogen (genaures studium später),um es für mich verständlich zu machen.
egal wie oft die methode aufgerufen wird,behält C# die strings im speicher und dehmentsprechend wäre das einsetzen von const strings sinnfrei.
mfg nuckey
Kha - Mo 30.05.11 19:41
Grundsätzlich kann ich mich Ralfs Schlusssatz nur anschließen, nur noch eine Anmerkung:
Nuckey hat folgendes geschrieben : |
| oder wird jedesmal beim aufruf der methode die strings neu generiert zb.: aufn stack ? |
Referenztypen werden
nie auf dem Stack abgelegt.
Ralf Jansen - Mo 30.05.11 20:08
| Zitat: |
| egal wie oft die methode aufgerufen wird,behält C# die strings im speicher und dehmentsprechend wäre das einsetzen von const strings sinnfrei. |
Die Erkenntnis ist richtig die Begründung aber nicht. Beim Compilieren würde die Konstante die du im Case referenzierst durch das Literal das hinter der Konstante steckt ersetzt. Der CIL Code wäre absolut identisch egal ob du das Literal direkt benutzt oder da eine Konstante einsetzt.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!