gpt4 book ai didi

c# - 如何释放或回收 C# 中的字符串?

转载 作者:太空狗 更新时间:2023-10-29 18:20:45 26 4
gpt4 key购买 nike

我有一个大字符串(例如 20MB)。

我现在正在解析这个字符串。问题是 C# 中的字符串是不可变的;这意味着一旦我创建了一个子字符串并查看它,内存就被浪费了。

由于所有的处理,内存被我不再使用、不需要或引用的 String 对象堵塞;但是垃圾收集器释放它们的时间太长了。

所以应用程序内存不足。

我可以使用性能不佳的 club 方法,并调用几千次:

GC.Collect();

无处不在,但这并不能真正解决问题。

我知道 StringBuilder创建 大字符串时存在。

我知道 TextReader 的存在是为了将 String 读入 char 数组。

我需要以某种方式“重用”一个字符串,使其不再是不可变的,这样我就不会在 1k 的情况下不必要地分配千兆字节的内存。

最佳答案

如果您的应用程序快死了,那可能是因为您仍然有对字符串的引用——而不是因为垃圾收集器只是未能清理它们。我已经看到它像那样失败了,但这不太可能。您是否使用分析器来检查您是否确实确实一次在内存中有很多字符串?

总而言之,您不能重复使用一个字符串来存储不同的数据——这是不可能的。如果愿意,您可以编写自己的等价物——但有效且正确地做到这一点的机会非常渺茫。现在,如果您可以提供有关您正在做的事情的更多信息,我们可能会建议不使用太多内存的替代方法。

关于c# - 如何释放或回收 C# 中的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7324918/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com