如何在C#中释放或回收字符串?

Ian*_*oyd 8 c# string garbage-collection immutability

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

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

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

因此应用程序内存不足.

我可以使用表现不佳的俱乐部方法,并拨打几千个电话:

GC.Collect();
Run Code Online (Sandbox Code Playgroud)

无处不在,但这并没有真正解决问题.

我知道StringBuilder创建一个大字符串时存在.

我知道TextReader存在读Stringchar数组.

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

Jon*_*eet 11

如果你的应用程序正在死亡,那可能是因为你仍然有对字符串的引用 - 不是因为垃圾收集器只是无法清理它们.我已经看到它失败了,但它不太可能.你有没有使用Profiler来检查,你真的做到一次在内存中很多串的?

它的长短是因为你不能重复使用字符串来存储不同的数据 - 它无法完成.如果你愿意,你可以写自己的等价物 - 但是有效和正确地做这件事的可能性非常小.现在,如果您可以提供有关您正在做的事情的更多信息,我们可能会建议不使用这么多内存的替代方法.