为了账号安全,请及时绑定邮箱和手机立即绑定

关于查询效率优化的问题

/ 猿问

关于查询效率优化的问题

沧海一幻觉 2018-12-07 11:10:32

各位大侠帮帮忙

我写了个逻辑根据TAG获取游戏信息 需求是根据游戏ID获取游戏关联的TAG 取前3个 第一个TAG关联9个游戏 第2和第3个各关联3个 如果总是不到15个 就按照游戏类型获取剩下的。。

我的代码是这样写的:

switch (i)
 {
     case 0:
       List<Tag> temp1 = new List<Tag>(templist).FindAll(temp => temp.TagID == list[i]);
        for (int j = 0; j < temp1.Count && j < 9; j++)
            if (!gameids.Contains(temp1[j].ObjectID) && temp1[j].ObjectID!=ObjectID)
                        gameids.Add(temp1[j].ObjectID);
                        break;
      case 1:
        List<Tag> temp2 = new List<Tag>(templist).FindAll(temp => temp.TagID == list[i]);
                        for (int j = 0; j < temp2.Count && j < 3; j++)
                        if (!gameids.Contains(temp2[j].ObjectID) && temp2[j].ObjectID != ObjectID)
                         gameids.Add(temp2[j].ObjectID);
                        break;
       case 2:
        List<Tag> temp3 = new List<Tag>(templist).FindAll(temp => temp.TagID == list[i]);
                         for (int j = 0; j < temp3.Count && j < 3; j++)
                         if (!gameids.Contains(temp3[j].ObjectID) && temp3[j].ObjectID != ObjectID)
                                gameids.Add(temp3[j].ObjectID);
                        break;
                }

 

但效率不高 请问有什么好的优化方法 谢谢了

查看完整描述

1 回答

?
侃侃无极

  看了下你的代码,你多次从同一个templist中做查询,效率自然不高,因为你会对templist做多次的循环,还不如在一次循环中把你要做的事都做完,也就是尽量让templist中的每个元素只被访问一次,这种技术经常使用,比如排序.类似如下;

foreach(Tag tag in templist)

{

  把你的业务逻辑都写在这里,可能需要中间临时变量和临时的List<Tag>
}

查看完整回答
反对 回复 2019-01-21
  • 1 回答
  • 0 关注
  • 174 浏览
我要回答

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信