Ian*_*oyd 8 c# string garbage-collection immutability
我有一个大字符串(例如20MB).
我正在解析这个字符串.问题是C#中的字符串是不可变的; 这意味着一旦我创建了一个子字符串,并查看它,就会浪费内存.
由于所有的处理,内存被String不再使用,需要或引用的对象堵塞; 但它需要垃圾收集器太长时间才能释放它们.
因此应用程序内存不足.
我可以使用表现不佳的俱乐部方法,并拨打几千个电话:
GC.Collect();
Run Code Online (Sandbox Code Playgroud)
无处不在,但这并没有真正解决问题.
我知道StringBuilder在创建一个大字符串时存在.
我知道TextReader存在读String入char数组.
我需要以某种方式" 重用 "一个字符串,使其不再是不可变的,这样我就不会在1k的情况下不必要地分配千兆字节的内存.
Jon*_*eet 11
如果你的应用程序正在死亡,那可能是因为你仍然有对字符串的引用 - 不是因为垃圾收集器只是无法清理它们.我已经看到它失败了,但它不太可能.你有没有使用Profiler来检查,你真的做到一次在内存中很多串的?
它的长短是因为你不能重复使用字符串来存储不同的数据 - 它无法完成.如果你愿意,你可以写自己的等价物 - 但是有效和正确地做这件事的可能性非常小.现在,如果您可以提供有关您正在做的事情的更多信息,我们可能会建议不使用这么多内存的替代方法.