使用foreach()-performance优化我的搜索函数
本文关键字:我的 搜索 函数 优化 -performance foreach 使用 | 更新日期: 2023-09-27 18:26:31
这是交易。我有三张桌子。
-
Main(包含ID和SubMain列表)~130个项目(第一次过滤后)
-
SubMain(包含SubMainID)~120个项目(它得到了一个n到m的参考,所以还有另一个表)
-
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
:
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
,使您自己的类用作包含MainID
和SubMainID
的键。有了这个Dictionary
,你不必搜索,你只需找到。。。有点
您也可以sort
您的lists
,并尝试使用BinarySearch
搜索它-然后您有O(logn)。但使用Dictionary
的解决方案要简单得多。