使用拆分方法时,拆分可能导致阵列尺寸超出支持范围的字符串

时间:2017-08-18 18:40:43

标签: c# arrays string

根据 this post数组(在我的示例中)可以容纳的最大元素数是2 146 435 071。 我想将一个字符串拆分成一个列表,但这些元素可能超过10 000 000 000,因此这可能意味着不使用Split方法,但是如果仍然可以使用它也没关系。
我怎样才能以最佳性能做到这一点?

  • 试图在添加到列表时递归删除第一次出现described here,直到没有分隔符但这很慢
  • 列表的结果元素可能会跨越几行

在进行任何更改之前,这是我的代码:

var allTokens = allText.Split(Delimiters).ToList();

allText值的示例:

fgfg,ghgh,"gjhj
hghdg,hjhgj",ghg
ghgh,kiwj,fhgfg,
hsk,,jw,"address line1
adrress line 2
zip code
country"

问题:大文件抛出OutOfMemoryException

1 个答案:

答案 0 :(得分:0)

要解决这个问题,我有以下伪代码:

  

[1]检查allText是否很大(长度大于某个值 - 取决于字符串中分隔符的预期频率)
  [2]重复:如果足够大,将allText分成两个字符串
  [3]使用Split方法拆分生成的多个字符串(或者allText很小)   [4]初始化清单
  [5]来自[3]

的所有字符串[]的addRange

这是@Sach对问题的评论