Autor Beitrag
Nuckey
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 78



BeitragVerfasst: Mo 30.05.11 18:24 
also Frage: wie intelligent verwaltet C# string o. Zeichenketten in switchblöcken.
folgendes beispiel.

ausblenden 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 user profile iconChristian S.: Code- durch C#-Tags ersetzt
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 78



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mo 30.05.11 19:41 
Grundsätzlich kann ich mich Ralfs Schlusssatz nur anschließen, nur noch eine Anmerkung:
user profile iconNuckey hat folgendes geschrieben Zum zitierten Posting springen:
oder wird jedesmal beim aufruf der methode die strings neu generiert zb.: aufn stack ?
Referenztypen werden nie auf dem Stack abgelegt.

_________________
>λ=
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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.