C# 使用拆分方法拆分可能导致数组维数超出支持范围的字符串

C# 使用拆分方法拆分可能导致数组维数超出支持范围的字符串,c#,arrays,string,C#,Arrays,String,据 在我的示例中,一个数组可以容纳的最大元素数是2146435071。 我想将一个字符串拆分为一个列表,但是元素可能远远超过10000,因此这可能意味着不使用split方法,但如果仍然可以使用它,也可以。 我怎样才能以最好的性能做到这一点 尝试在添加到列表时递归删除第一个匹配项,直到没有分隔符,但速度非常慢 列表的结果元素可能跨越多行 以下是更改前的代码: var allTokens = allText.Split(Delimiters).ToList(); allText值的示例: fgfg

据 在我的示例中,一个数组可以容纳的最大元素数是2146435071。 我想将一个字符串拆分为一个列表,但是元素可能远远超过10000,因此这可能意味着不使用split方法,但如果仍然可以使用它,也可以。 我怎样才能以最好的性能做到这一点

尝试在添加到列表时递归删除第一个匹配项,直到没有分隔符,但速度非常慢 列表的结果元素可能跨越多行 以下是更改前的代码:

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] 检查allText的长度是否大于某个特定值-取决于字符串中分隔符的预期频率 [2] 重复:如果足够大,请将所有文本拆分为两个字符串 [3] 使用split方法拆分生成的多个字符串,或者allText较小 [4] 初始化列表 [5] [3]中所有字符串[]的addRange


下面是@Sach对问题的评论

亲爱的上帝,这是一段很长的文字。是否可以将原始字符串拆分为多个字符串,然后将其拆分为小于最大大小的数组?我建议您一次读取文件中的一行,然后从中进行处理,而不是将整个文件读入内存。另外,无论你需要什么样的列表,我建议在你从文件中读取时处理它,而不是尽可能将其全部加载到列表中。同样根据你的例子,我不认为分割是你想要的,因为我猜你无论如何都不想在双引号内用逗号分割。分割之前也不能有这么长的System.String。对于通常的大对象限制,字符串长度不能超过约2**30,每个字符的2到30次方字符值为2字节。感谢@Sach,我使用了您的建议,我避免逐行读取,因为上面示例中的gjhj\nhghdg最终将不是一个令牌。还注意到阵列上我的最大值略高于85900000