C#で文字列を使用する特定のケースでは、CLRが最適化として文字列ストリングを実行することはよく知られています。インタープール内のすべての文字列を読み取ることはできますか?
だから私の質問は以下のとおりです。
- ことが可能インターンプールに現在あるすべての文字列を読み取るために?
- 各保留文字列に参照カウントを取得する方法はありますか?
- インターンプールを別のプロセス空間から読み取ることは可能でしょうか?
- これらのいずれも可能でない場合、これらのユースケースを許可しない理由は何ですか?
メモリの使用状況を監視する場合には、これがやや役立つことがあります。機密情報を扱う場合にも役立つかもしれません(ただし、多くのシナリオではSecureString
がより好ましいと思いますが)。
は、私の知る限り、文字列のインターンに関連する唯一のパブリックメソッドは、私は本当の問題を解決しようとしていない、好奇心から求めているString.Intern(string)
とString.IsInterned(string)
です。私は、インラインプールの文字列に基づいてロジックを実行することは悪い考えであることを認識しています。
_ [これらの使用例を許可しない理由は何ですか?] _ [すべての機能が-100ポイントで始まるため](https://blogs.msdn.microsoft.com/ericgu/2004/01/12/minus- 100点/)とチームは代わりに実際に有用なことをしている。 – stuartd
"これらのどれも可能ではありませんが、これらのユースケースを許可しない理由は何ですか?"これらはユースケースではなく、ユースケースのないAPI機能要求です。ユース・ケースでは、なぜそれらをそれぞれ何とかしたいと説明しています。後であなたが実際の問題を解決しようとしていないと言う事実は、ユースケースを持っていないことを示しています。個人的には、私は役に立たない機能を混乱させることには反対していません。 –
おそらく。 * Microsoft.Diagnostics.Runtime *からClrMD APIを介してすべてのオブジェクトのリストを取得し、* IsInterned *を持つすべての内部文字列を検索します。 APIは、必要な他の統計情報も提供します。あなたがデバッガを書いていない限り、それを行う理由はありません。 – IllidanS4