最大 19,000 のエントリを含むコレクションがあり、foreach ステートメントで繰り返し処理しています。foreach の開始時に、文字列に 2 つの単語のうちの 1 つとブール値が含まれているかどうかを確認してから、続行するか、さらにいくつかの操作を実行します。
foreach (SvnStatusEventArgs e in results) //results being my Collection
{
if ((e.Path.Contains("bin") ||
e.Path.Contains("obj")) && !includeBinObjFolders)
continue;
//Do a bunch of things
}
コンピューターが文字列の「bin」または「obj」をチェックしてからブール値をチェックするかどうかはわかりませんでしたが、文字列にこれら2つの「キーワード」のいずれかが含まれていてもかまわないことに気付くかもしれません。 .
基本的に、私が言っていることは、次の実行には別の時間がかかるということだと思いますか?
foreach (SvnStatusEventArgs e in results) //results being my Collection
{
if (!includeBinObjFolders &&
(e.Path.Contains("bin") ||
e.Path.Contains("obj")
)
)
continue;
//Do a bunch of things
}
何らかの理由で、一番右の式を最初に評価し、左に進むという声が頭の後ろに聞こえます。もしそうなら、最初のほうが効率的ですよね?200 個以下のファイルを超えるコレクションをテストする簡単な方法がないため、単純にタイマーを使用するだけでは非常に近い結果が得られ、一方の方法が優れているかどうかを確認できません。
率直に言って、エンド ユーザーがこのコレクションで 500 を超えるデータに遭遇する可能性はほとんどないと思いますが、理論的には、ユーザー エラーが原因で発生する可能性があります。
編集ありがとうみんな。ここに投稿する前に検索してみましたが、ロジックに関して「短絡」という用語を忘れていたので、ここで私の冗長なタイトルに関連する答えを見つけるのに苦労していました.
編集 2実際には、2 つの for ループがそれぞれ 20,000 回繰り返される小さなコンソール アプリケーションを作成しました。1 つは Contains を最初にテストし、もう 1 つは Bool を最初にテストしました。これらの 2 つのループを 10 回繰り返すと、最初のブール値は 20K の反復ごとに平均で 0.5 ミリ秒かかるように見えます。最初に評価される Contains は、20K の反復ごとに約 3 ミリ秒かかります。本当に小さな違いです!