参照はここにあります:http: //msdn.microsoft.com/en-us/library/system.string.intern.aspx
これはコンパイラによって自動的に行われることが多いようですが、手動で行うこともできます。私が間違っている場合は私を訂正し、これにもう少し光を当ててください。言語がC#、VB.Net、C ++ / CLI、その他であるかどうかは重要ですか?
ありがとう。
参照はここにあります:http: //msdn.microsoft.com/en-us/library/system.string.intern.aspx
これはコンパイラによって自動的に行われることが多いようですが、手動で行うこともできます。私が間違っている場合は私を訂正し、これにもう少し光を当ててください。言語がC#、VB.Net、C ++ / CLI、その他であるかどうかは重要ですか?
ありがとう。
これは、値が繰り返される可能性が高い場合の逆シリアル化/実体化コードです(ほぼ列挙型ですが、完全ではありません)。何千ものレコードを逆シリアル化する場合、これによりメモリに大きなメリットがもたらされます。ただし、このような場合は、共有キャッシュを飽和させないように、別のインターンキャッシュを使用することをお勧めします(または、共有キャッシュで問題ない場合もあります。シナリオによって異なります)。
ただし、重要な点は次のとおりです。同じ値を持つさまざまな文字列インスタンスが多数存在する可能性が高いシナリオ。そこでは、逆シリアル化が大きな候補です。また、インターンキャッシュのチェックにはCPUオーバーヘッドがいくらかあることにも注意する必要があります(データを追加するとオーバーヘッドが徐々に大きくなります)。したがって、構築されたオブジェクトがgen-0よりも長く存続する可能性がある場合は、これを行う必要があります。 ; いずれにせよ、それらが常に迅速に収集される場合は、それらをインターンバージョンと交換する価値はありません。
プロファイリングによってパフォーマンス上の利点が得られることが示された場合は、そうすることをお勧めします。
これはランタイムによって実行されますが、言語は異なる動作で独自の文字列型を導入する可能性があります。これは、リテラル文字列に対してのみ行われます。動的に作成された文字列をインターンしたい場合は、そうすることができます。一つには、文字列の比較が非常に簡単になりますが、一部の操作はインターンの恩恵を受ける一方で、他の操作はそうではないことに注意してください。たとえば、インターンされた文字列はプロセスがシャットダウンするまで解放されません(内部構造に基づいているため、詳細についてはこの質問を参照してください)。したがって、手動で多数の文字列をインターンすると、プロセスは大量のメモリを持ち歩きます。