2016-11-25 5 views
1

私は大きなファイルを解析しています。私は文字列抽出プロセスを最適化する必要があります(ファイルの解析を完了するまでには現在、プログラムは1〜2分かかります)。これは、ソフトウェアのデバッグと開発のためのキラーです。C#の区切り文字まで、文字列から部分文字列を抽出する最も速い方法は何ですか?

プログラム例

string sample = "First Line\nSecond Line\nThird Line"; 
string extracted_string = ExtractString(ref sample, "\n"); 
// extracted_string should hold "First Line" 
// sample should hold "Second Line\nThird Line"; 

ExtractString機能これまで各レコードは、約50を取っている

function string ExtractString(ref string original, string delimiter) 
{ 
    int index_of = original.IndexOf(delimiter); 
    string result = ""; 

    if(index_of >= 0) 
    { 
     result = original.Substring(0, index_of); 

     // Remove string & delimiter from original 
     original = original.Remove(0, index_of + 1); 
    } 
    else 
    { 
     result = original; 
     original = ""; 
    } 

    return result; 
} 

私は、プロセスをスピードアップするためにこれを実行するための別の方法があります.... -80msを処理すると、およそ6000-7000レコードがあります。

+0

についての詳細を読んでください、あなたはのstring.Splitを試してみましたか? – Yaman

+0

StringBuilderを使用することをお勧めしますか? 'StringBuilder'で文字列を操作するほうがずっと速くなります。 – pwas

+1

見つかった文字列を元の文字列から切り取る必要がありますか?トリミングされた元の文字列を必要としない場合は、最後に見つかった改行のインデックスを渡して、次の部分文字列クリップの開始点として使用するか、ファイルを操作するために別の方法を使用します。 – Steve

答えて

4

string.Split(char delimeter)メソッドを使用する必要があります。文字列の操作よりもはるかに高速です。文字列は変更できません。この特性により、パフォーマンス上の問題が発生します。各操作で新しいメモリが割り当てられます。あなたの方法はに変更します。

string sample = "First Line\nSecond Line\nThird Line"; 
var extracted_strings = sample.Split('\n'); 

How to improve string concatenation performance in Visual C#

関連する問題