【问题标题】:Delete string from computer memory in C#在 C# 中从计算机内存中删除字符串
【发布时间】:2015-04-03 12:45:16
【问题描述】:

我必须使用字符串,因为它具有我拥有的所有功能,例如检查它的任何字母、子字符串等。使用字符串后,我需要将其从计算机内存中删除。我已经阅读过有关 SecureString 的信息,但我无法使用它,因为它没有很多功能。

谁能帮我从内存中删除字符串?我该如何解决?

【问题讨论】:

  • 您不必这样做 - 有一个 Garbage Collector。也许你应该提供更多关于你的程序做什么的信息。
  • 这是一个服务器-客户端程序。服务器使用流从客户端获取字节。 ( bytes = stream.Read(messages, 0, messages.Length); Then : getMessage = System.Text.Encoding.ASCII.GetString(messages, 0, bytes);) 所以getMessage已经是一个字符串了。

标签: c# string memory


【解决方案1】:

在大多数情况下,两个答案都应该提供正确的答案,但如果您的字符串值非常关键,您必须在使用后将其从内存中删除,最好的选择是使用SecureString.

你已经说过SecureString没有提供你特别需要的方法;在这种情况下,您需要自己做一些事情。幸运的是,.NET 是开源的,您可以轻松地从 here 复制粘贴您需要的实现。将它们作为SecureString 的扩展来使用。

【讨论】:

    【解决方案2】:

    只要那些是动态字符串,而不是编译后的文字 - 您无需担心“删除”它们,垃圾收集器会为您完成。字符串与任何其他 .net 类相同,因此您无需管理它们分配的内存。

    如果您担心应用程序在某些时间段占用的内存大小 - 您可以通过调用 System.GC.Collect() 强制 GC 收集所有不再需要的资源。但通常不需要这样做。

    另外请注意,调用System.GC.Collect() 并不意味着垃圾收集将立即开始 - 这意味着 GC 将在不久的将来安排收集。

    【讨论】:

      【解决方案3】:

      如果你删除了对字符串的所有引用,你可以调用System.GC.Collect()来强制垃圾收集器运行,尽管即使这样也不能保证立即运行,更像是“嘿,GC,一旦你得到机会。”而且根本不推荐。如果您经常这样做,可能会导致严重的性能问题。

      如果您的字符串非常重要,以至于您甚至不希望它在内存中浮动,那么 SecureString 确实是您的最佳选择。您只需为其重新实现所需的函数(如 .SubString())。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-11-22
        • 2022-01-09
        • 2011-12-10
        • 1970-01-01
        • 1970-01-01
        • 2010-12-02
        相关资源
        最近更新 更多