这是合约。我有3张桌子。
Main(包含ID和SubMain列表)~130项(首次过滤后)
SubMain(包含SubMainID)~120项 (它有一个n到m的引用所以还有另一个表)
MainToSub(包含ID,MainID和SubMainID)~500项
主要是我正在使用的模型,我在GridView中显示。使用此foreach
,我搜索其中包含SearchSubMainID的每个Model部件。这有效但问题是我跳到了超过72000的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
?
答案 0 :(得分:1)
您可以使用Dictionary
,让自己的类用作包含MainID
和SubMainID
的密钥。使用此Dictionary
您无需搜索,您只需找到......有点。
答案 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);
答案 2 :(得分:0)
您也可以sort
lists
并尝试使用BinarySearch
进行搜索 - 然后是O(log n)。但使用Dictionary
的解决方案要简单得多。