2015-04-03 70 views
1

我必須使用字符串,因爲它具有所有功能,我喜歡檢查它的任何字母,子字符串等。使用過的字符串後,我需要從計算機內存中刪除它。我已經閱讀過關於SecureString的內容,但我無法使用它,因爲它沒有太多的功能。從C#中的計算機內存刪除字符串

任何人都可以幫助我如何從內存中刪除字符串?我該如何解決它?

+4

你不必 - 有一個[垃圾收集器](https://msdn.microsoft.com/en-us/library/ms973837.aspx)。也許你應該提供關於你的程序的更多信息。 – 2015-04-03 12:47:00

+0

這是一個服務器端客戶端程序。服務器使用流從客戶端獲取字節。 (bytes = stream.Read(messages,0,messages.Length); then:getMessage = System.Text.Encoding.ASCII.GetString(messages,0,bytes);)所以getMessage已經是一個字符串。 – Vicmyrkh 2015-04-03 13:32:36

回答

1

兩個答案應該已經提供了大多數情況下,正確的答案,但如果你的字符串值是相當關鍵的,你必須內存使用後刪除它,最好的辦法是使用SecureString

您已經聲明SecureString未提供您特別需要的方法;在這種情況下,你需要自己做一些。幸運的是,.NET是開源的,你可以很容易地從here複製粘貼你需要的實現。將它們作爲SecureString的擴展名使用它們。

0

只要那些動態字符串,沒有編譯文字 - 你不需要擔心「刪除」它們,垃圾收集器會爲你做。字符串與任何其他.NET類相同,因此您不需要管理它們正在分配的內存。

如果您擔心應用程序在一段時間內需要的內存大小 - 您可以強制GC通過調用System.GC.Collect()來收集不再需要的所有資源。但通常這不是必需的。

另外請注意,調用System.GC.Collect()並不意味着垃圾收集將立即開始 - 這意味着GC將盡快安排收集。

0

如果您刪除對字符串的所有引用,則可以調用System.GC.Collect()來強制垃圾收集器運行,但即使這樣也不能保證立即運行,更像「嘿,GC,只要你有機會運行「。而且它完全不被推薦。如果你經常這樣做,它會導致嚴重的性能問題。

如果你的字符串非常重要,你甚至不希望它在內存中浮動,SecureString真的是你最好的選擇。你只需要重新實現你需要的函數(比如.SubString())。