C〓〓特殊なstringタイプの詳細


1.はじめに
stringは引用タイプです。これはみんな知っていますよね?しかし、普段使っているうちに、それはいくつかの値のタイプの特徴を持っていることが分かりました。これは一体なぜですか?
その理由は.Netがstringオブジェクトを大量に操作する場合、引用対象を大量に操作する場合、性能は値の種類に比べて爽快ではないと考えているからです。Netはこの性能を向上させるために、専用のソリューションを提供します。
2.本文
まずコードを見せてください。

      string str1 = "aa";
      string str2 = "a" + "a";
      Console.WriteLine(ReferenceEquals(str1, str2)); //print:true
このstr 1とstr 2のメモリが住所を指すのは同じです。
その理由は.NetがCLR内部でHashテーブルを維持しています。keyは文字列の内容であり、値は指定された托管ヒープの住所です。初期化して新しい文字列を作成すると、NetはこのHashテーブルで同じ値があるかどうかを検索します。keyが同じであれば、既存の文字列のアドレス値を新たに作成した文字列に割り当てます。存在しない場合はアドレスを再割り当てします。これはなぜ上のコードのメモリがtrueですか?
もう一つのコードを見せてください。

     string str3 = "ab";
     string str4 = "a";
     str4 += "b";
     Console.WriteLine(ReferenceEquals(str3, str4));//print :false
falseが現れたのは、上の欄のキーワード「初期化作成」に注意してください。文字列が動的に作成されている場合、NetはHashテーブルに行って作成されているかどうか検索するのではなく、直接作成します。
上のコードを最適化して性能を向上させたいならば、私達は手動で文字列の駐留池に参加して比較することができます。

     string str3 = "ab";
     string str4 = "a";
     str4 += "b";
     str4 = string.Intern(str4);//Intern:            ,               
     Console.WriteLine(ReferenceEquals(str3, str4));//print :true
3.まとめ
最後にstringに対して結論を下す:
1.stringはclrでnewobj命令で作成するのではなく、ldstr命令で作成するのです。また、stringは値のタイプの特徴を持っていますが、メモリ上では引用タイプで、ブラケットの上にあります。
2.stringはsealedの飾りですから、布団類が集められません。
3.同じ内容を作成すると、stringは同じ住所を指し、またstringを操作するたびに新しい住所(stringの一定性)が生成されます。
4.大量につなぎ合わせるにはやはりStringBuiderを使います。動きはstringと違って一定ですが、StrigBuiderを作るには価格が大きいので、スティッチングはstringを使ったほうが性能がいいかもしれません。
以上が本文の全部です。本文の内容は皆さんの学習や仕事に一定の助けをもたらしてくれると同時に、私達を応援してください。