使用foreach()-performance优化我的搜索函数

本文关键字:我的 搜索 函数 优化 -performance foreach 使用 | 更新日期: 2023-09-27 18:26:31

这是交易。我有三张桌子。

  1. Main(包含ID和SubMain列表)~130个项目(第一次过滤后)

  2. SubMain(包含SubMainID)~120个项目(它得到了一个n到m的参考,所以还有另一个表)

  3. MainToSub(包含ID、MainID和SubMainID)~500件

Main是我使用的模型,我在GridView中显示它。有了这个foreach,我会搜索每一个有SearchSubMainID的Model零件。这很有效,但问题是我跳到了foreach,它并没有真正优化

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

使用foreach()-performance优化我的搜索函数

好吧,您可以将其中一个检查向上移动一个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);

您可以使用Dictionary,使您自己的类用作包含MainIDSubMainID的键。有了这个Dictionary,你不必搜索,你只需找到。。。有点

您也可以sort您的lists,并尝试使用BinarySearch搜索它-然后您有O(logn)。但使用Dictionary的解决方案要简单得多。