2017-08-18 5 views
-2

を使用する場合 this postによれば(私の例では)配列が保持できる要素の最大数は、私は、文字列を分割する2 146 435 071. でサポートされている範囲をexceedeリストに追加することができますが、要素は10 000 000 000をはるかに超える可能性があります。したがって、これはSplitメソッドを使用せずに使用することもできますが、これも問題ありません。
最高のパフォーマンスでこれを行うにはどうすればよいですか? スプリット法

  • には区切り文字が存在しなくなるまでリストに追加しているときに再帰的に最初に出現described hereを除去しようとしたが、これはリストの
  • 得られた要素がいくつかのラインを介してまたがることが非常に遅い
ここ

は、すべての変更の前に私のコードです:ALLTEXT値の

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

例:

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

問題:大容量ファイルは、私は以下の擬似コードを持ってこの問題を解決するためのOutOfMemoryException

+0

大量のテキストです親愛なる領主に@Sachによってコメントに従います。元の文字列を複数の文字列に分割し、それらを最大サイズ以下の配列に分割するオプションはありませんか? – Sach

+2

ファイルから一度に1行ずつ読み込み、ファイル全体をメモリに読み込むのではなく、そこから処理することをお勧めします。また、あなたがそのリストを必要とするものは、可能ならばリストにすべてロードするのではなく、ファイルから読むときにそれを扱うことをお勧めします。また、あなたの例に基づいて、私はあなたが二重引用符の中のコンマで分割したくないと思っているので、あなたが望むものは「分割」とは思わない。 – juharr

+3

あなたはとても長い「System.String」(分割前)を持つことはできません。通常の大きなオブジェクト制限では、文字列は2バイトの「char **」値の約2 ** 30(2から30番目の)の文字列であることができます。 –

答えて

0

をスロー:

ALLTEXTが一定値よりも大きい大きい(長さであれば、[1]チェック -
[2] repeat:十分な大きさであれば、allTextを2つの文字列に分割します。
[3] splitメソッドを使用して結果の複数の文字列を分割します(またはallTextは小さい) [4]リスト
を初期化する[5]すべての文字列のaddRange [] [3]

からこれは質問