1

これが取引です。私は3つのテーブルを持っています。

  1. Main ( ID と SubMain のリストを含む) ~ 130 アイテム (最初のフィルタリング後)

  2. SubMain (SubMainID を含む) ~ 120 アイテム (to m 参照を取得したため、別のテーブルがあります)

  3. MainToSub (ID、MainID、および SubMainID を含む) ~ 500 項目

Main は、使用しているモデルであり、GridView に表示します。これforeachで、SearchSubMainID を持つすべてのモデル パーツを検索します。foreachこれは機能しますが、問題は、実際には最適化されていないに 72000 以上ジャンプしていることです。

foreach (var item in MainToSub)
{ 
 // 500 Jumps
    foreach (var temp in Main)
    {
        if (item.MainID == temp.ID && item.SubMainID == SearchSubMainID)
        {
            Model.Add(temp);
            // ~ 10 Jumps
        }
       // 72000 jumps
    }
}

質問: を最適化する方法はありforeachますか?

4

3 に答える 3

1

さて、チェックの 1 つを 1 つ上に移動できますforeach

foreach (var item in MainToSub)
    if (item.SubMainID == SearchSubMainID)
        foreach (var temp in Main)
            if (item.MainID == temp.ID)
                Model.Add(temp);

これは実際には最適化ではありませんが、LINQ 式に変換することもできます。

foreach (var temp in MainToSub
    .Where(i => i.SubMainID == SearchSubMainID)
    .Join(Main, i => i.MainID, t => t.ID, (i, t) => t))
        Model.Add(temp);
于 2013-08-06T09:12:42.700 に答える
1

を使用して、独自のクラスを作成し、およびDictionaryを含むキーとして使用できます。これを使えば、検索する必要はありません。見つけるだけです。MainIDSubMainIDDictionary

于 2013-08-06T09:11:40.643 に答える
0

また、 O(log n)を使用して検索することもできsortます。しかし、ソリューションははるかに簡単です。listsBinarySearchDictionary

于 2013-08-06T09:13:56.863 に答える