2016-04-13 3 views
-4

私は、分割を削除し、私のコントローラでそれを実行した場合、このもっと速いのは、私のコントローラやカミソリに文字列split()。contains()ですか? ASP.Net MVC

@if(spaceEvent.RegisteredStudentIds.Split(',').Contains(@Model.MeStudentId)) { 
    // show some specific HTML 
} 

のように見える私のかみそりのコードの行は、それがより速くなるでしょうか? コントローラーの.contains()もうまくいきました! この場合でも問題はありますか?

+1

それらはまた、異なる機能を有する。分割は 'Rob、ert'には合致せず、分割しません。 – Rob

+2

参照:[performance rant](https://ericlippert.com/2012/12/17/performance-rant/)。つまり、1つの大きい文字列に少なくとも1つの小さな文字列が含まれているかどうかを確認する場合は、[IndexOf](https://msdn.microsoft.com/library/k8b1470s.aspx)がゼロ以上であるかどうかを確認できます。 (0より小さい値は意味がない:見つからない)。 – Corak

+2

実証できるパフォーマンスの問題がない限り、問題はありません。言い換えれば、プログラミング*ロジック*はコントローラではなく、ビュー内で発生するはずです。 –

答えて

0

はい、いいえ! にオーバーヘッドがあるため、 はありません。それは徹底した文字列を反復し、文字と魔法の一致を入力と一致させ、分割して作り、結果の配列を返すべきです。

は、大きな文字列(たとえば100MB)で100M文字を繰り返し、最初と最後の文字を比較する必要があります。たとえば、200Mワードで100Mを分割した場合、 IEnumerable.Containsは最初の単語と入力を比較し、最初の文字が一致しない場合は他の文字をスキップして次の単語に進み、後で5文字進む。このシナリオでループは200Kを繰り返します(入力に依存します)。例えば、魔女は100M未満です!
大きい文字列があり、Containsメソッドを複数回使用する場合は、分割して結果を配列に保持してから、array.Containsメソッドを使用してください。

関連する問題