文字列のペアである次の 2 つのリストがあります。1 つは私が期待するもので、もう 1 つは私が見つけたものです。足りないものを見つけたい。コードは機能しますが、場合によっては、他のケースよりもはるかに遅くなります。
- n = 1 の場合、呼び出しに 21 秒かかり
.Except()
ます。 - n = 10 の場合、呼び出しに 2 秒かかり
.Except()
ます。
どちらの場合も同じ要素数です。これは単なるハッシュ テーブルの衝突ですか? すべてのケースを均等に迅速に処理するにはどうすればよいですか?
List<KeyValuePair<string, string>> FoundItems = new List<KeyValuePair<string, string>>();
List<KeyValuePair<string, string>> ExpectedItems = new List<KeyValuePair<string, string>>();
int n = 1;
for (int k1 = 0; k1 < n; k1 ++)
{
for (int k2 = 0; k2 < 3500/n; k2++)
{
ExpectedItems.Add(new KeyValuePair<string, string>( k1.ToString(), k2.ToString()));
if (k2 != 0)
{
FoundItems.Add(new KeyValuePair<string, string>(k1.ToString(), k2.ToString()));
}
}
}
Stopwatch sw = new Stopwatch();
sw.Start();
//!!!! This is the slow line.
List<KeyValuePair<string, string>> MissingItems = ExpectedItems.Except(FoundItems).ToList();
//!!!!
string MatchingTime = "Matching Time: " + sw.ElapsedMilliseconds.ToString() + " (" + sw.ElapsedMilliseconds / 1000 + " sec)";
MessageBox.Show(MatchingTime + ", " + ExpectedItems.Count() + " items");
私のデータは実際には文字列です。簡単なので、このテスト ケースでは整数のみを使用します。