衆所周知,在某些情況下,當在C#中使用字符串時,CLR會將字符串interning作爲優化來使用。是否有可能讀取實習生池中的所有字符串?
所以我的問題是:
- 它可以讀取當前所有的實習生池的字符串?
- 有沒有辦法讓每個interned字符串的引用計數?
- 是否可以從單獨的進程空間讀取實習生池?
- 如果這些都不可能,那麼不允許這些用例的原因是什麼?
在某些情況下,我可以看到這在監視內存使用情況時有點用處。在處理敏感信息時也可能有用(儘管在許多情況下,我認爲SecureString
會更可取)。
據我所知,相關的字符串實習唯一的公共方法String.Intern(string)
和String.IsInterned(string)
我問出於好奇,而不是試圖解決一個真正的問題。我意識到,根據字符串實習生池做任何邏輯將是一個壞主意。
_「不允許使用這些用例的原因是什麼?」因爲[每個功能都以-100分開始](https://blogs.msdn.microsoft.com/ericgu/2004/01/12/minus- 100分/),而團隊則是在做一些實際有用的事情。 – stuartd
「f這些都不可能,不允許這些用例的原因是什麼?」這些不是用例 - 它們是API功能請求*,沒有用例。一個用例可以解釋爲什麼*你想要做這些事情。事後你說你不是在試圖解決一個真正的問題,這表明你沒有*用例。就我個人而言,我並不贊成混淆無用的功能。 –
可能。通過* Microsoft.Diagnostics.Runtime *中的ClrMD API獲取所有對象的列表,並使用* IsInterned *查找所有實例化的字符串。該API還可以提供您需要的其他統計信息。沒有理由這樣做,除非你正在編寫一個調試器。 – IllidanS4