【发布时间】:2015-07-14 19:49:49
【问题描述】:
为什么 StringBuilder 的大小大于字符串(~250MB)。
请阅读问题。我想知道字符串中大小限制的原因,而不是 stringbuilder 中的原因。我已经修复了读取文件的问题。
是的,我知道有一些操作,我们可以对字符串生成器执行附加、替换、删除等操作。但是当我们无法从中获取 ToString() 并且我们无法编写时,它有什么用?它直接在文件中。我们必须让 ToString() 来实际使用它,但是因为它的大小超出了字符串范围,所以会抛出异常。
因此,当我将大约 1 gb 的文件读入字符串生成器但无法将其转换为字符串时,是否有任何使用大小大于字符串的字符串生成器。我阅读了 StringBuilder 优于 String 的所有优点和缺点,但我无法解释这一点
更新: 如果在块中读取,我想从文件中加载 XMLDocument,然后无法加载数据,因为根级节点需要其结束标记,该标记将位于其他块块中
更新: 我知道这不是一个正确的方法,现在我是不同的过程,但我仍然想知道字符串中大小限制的原因,而不是 stringbuilder 中的原因
更新: 我已经解决了我的问题,想知道stringbuilder没有内存限制的原因。
【问题讨论】:
-
首先,您为什么还要将 1GB 文件加载到内存中?
-
阅读this SO 线程。它说关于处理大型文本文件。在这种情况下,StringBuilder 似乎不是一个好的解决方案。
-
您可以使用
ToString(int,int)生成更小的字符串。为什么你想把这么多的文本放在内存中呢?你想做什么? 有比在 StringBuilder 中做所有事情更好的选择,例如使用内存映射文件、解析、使用文本生成器等 -
这不是工作的正确工具,和/或不是解决问题的正确方法。
-
这听起来像是XY Problem 的情况。你对 X 有问题,并假设 Y 是解决方案,所以当你遇到麻烦时,你问的是 Y 而不是 X。您要解决的实际问题是什么?
标签: c# string memory stringbuilder