2016-12-12 14 views
-6

私は文字列のテキスト行を解析したいと思います。単語を '、'で区切ってみましょう。 私はsplitメソッドを文字列の行を2回実行していくので、いくつかの文字列を分割したので、私は自分で分割し、文字列の行をループし、charを連結文字にループすることにしました。一回の反復の 例:一方連結文字VS分割方法

string[] terms = new string[4]; 
string term = ""; 
string line = "home,work,studies,chill"; 
while(line[index] != ',') 
    term = term + line[index]; 
    index++; 
terms[index] = term; 

、チャーによって連結チャーは、毎回文字の配列を作成します。 どのようにすれば最も効率的ですか?

+3

あなたはそれをプロファイルして参照する必要があります。 –

+4

それを試してみてください。 'Split'を使うほうが効率的ですが、私は自分自身で分割して文字列線をループし、次にcharを連結文字とすることを決意しました。*は意味しています。多分いくつかのコードは役に立ちます –

+1

バルク連結はほとんど確実に遅くなります。 .NETの文字列は不変なので、連結は新しい文字列のためのスペースを割り当て、両方のソース文字列の内容をその新しい場所にコピーする必要があります。一括連結を行う場合は、 'System.Text.StringBuilder'クラスを使用する必要があります。このクラスは、その特定のタスクに対してはるかにメモリ効率が良いものです。 – JamesFaix

答えて

0

デリミタの間にあるすべての要素が必要な場合は、Split()が必要です。

第2要素だけが必要で、第1要素と第3要素にメモリを割り当てたくない場合は、IndexOfを使用して区切り文字を見つけ、SubStringを使用して文字列を抽出することができます。性能上の

詳細ヒントcan be found here

パフォーマンスの考慮事項

分割方法は、返される配列オブジェクトと各アレイ要素の文字列オブジェクトのメモリを割り当てます。アプリケーションで最適なパフォーマンスが必要な場合や、アプリケーションでメモリ割り当てを管理することが重要な場合は、IndexOfまたはIndexOfAnyメソッドの使用を検討してください。また、比較メソッドを使用して文字列内の部分文字列を検索するオプションもあります。

文字列を区切り文字で分割するには、IndexOfまたはIndexOfAnyメソッドを使用して文字列内の区切り文字を検索します。区切り文字列で文字列を分割するには、IndexOfまたはIndexOfAnyメソッドを使用して区切り文字列の最初の文字を検索します。 Compareメソッドを使用して、その最初の文字の後の文字がセパレータ文字列の残りの文字と等しいかどうかを判断します。

さらに、複数のSplitメソッド呼び出しで同じ文字セットを使用して文字列を分割する場合は、各メソッド呼び出しで単一の配列を作成して参照することを検討してください。これにより、各メソッド呼び出しのオーバーヘッドが大幅に削減されます。