首页 新闻 赞助 找找看

关于代码优化

0
悬赏园豆:20 [已解决问题] 解决于 2016-03-25 14:53

public static PageData GetPageList(int pageSize, int curPage,Mer m)
{

//m :当前登录的用户

List<ComOrder> o = DataAccess.GetAllList();//
List<ComOrder> n = new List<ComOrder>();//分中心数据
List<ComOrder> nn = new List<ComOrder>();//用户数据

if (m.MerType.Data == "分中心")
{
foreach (ComOrder c in o)
{
if ( m.Merchants.Contains(c.Subcenter))
{
n.Add(c);
}
}
}
else
{
foreach (ComOrder c in o)
{
if (c.JoiningTrader.Id == m.Id)
{
n.Add(c);
}
}

}

PageData pageData = new PageData();
pageData.PageSize = pageSize;
pageData.CurPage = curPage;
pageData.RecordCount = 0;
pageData.PageCount = 1;

int first = (curPage - 1) * pageSize + 1;
int last = curPage * pageSize;

foreach (ComOrder c in n)
{
pageData.RecordCount++;
if (pageData.RecordCount >= first && last >= pageData.RecordCount)
{
ComOrder comOrder = c;

nn.Add(comOrder);
}
}

if (pageData.RecordCount > 0)
pageData.PageCount = Convert.ToInt32(Math.Ceiling((double)pageData.RecordCount / (double)pageSize));

pageData.PageList = nn;
return pageData;
}

 

 

这样效率很慢  我能想明白问题  但是优化的时候越想越头疼,麻烦大神了

赵老汉的主页 赵老汉 | 初学一级 | 园豆:2
提问于:2016-03-25 13:37
< >
分享
最佳答案
1

你这段代码写的逻辑有问题,应该做为条件去数据库查询数据,而不是先把数据全部拉到内存再去操作完分页

收获园豆:20
Rich.T | 老鸟四级 |园豆:3440 | 2016-03-25 14:10

偶的灵感来源于你

赵老汉 | 园豆:2 (初学一级) | 2016-03-25 14:12

@玉赛: 拉到内存里做逻辑的数据一定是经过筛选的,不然一整张表拉下来,如果里面数据量很大慢是必然的

Rich.T | 园豆:3440 (老鸟四级) | 2016-03-25 14:14

@Rich.T: 但是我还是有一点没想明白呢,我的表并没有明确表示这条数据属于谁,只是根据登录人来划分的,这个表每条数据有商户的ID列也有分中心的ID列,我怎么破

赵老汉 | 园豆:2 (初学一级) | 2016-03-25 14:21

@玉赛: 比如你的表有商户ID和分中心的ID,你的登录用户肯定属于某一个商户ID和分中心ID

select * from 表 where exists(select 1 from 商户表 where user_id=登录用户.id)

我这样说你可看得明白

Rich.T | 园豆:3440 (老鸟四级) | 2016-03-25 14:23

@Rich.T: 明白了   你是让我先去判断是否商户还是分中心  然后根据ID去搜罗他家数据吗

赵老汉 | 园豆:2 (初学一级) | 2016-03-25 14:26

@玉赛: 找到表之间的关系,用子查询或是联表查询

Rich.T | 园豆:3440 (老鸟四级) | 2016-03-25 14:26

@Rich.T: 刚查了下exists   不好意思差点领会错,我拿着条件去碰看看对不对

赵老汉 | 园豆:2 (初学一级) | 2016-03-25 14:28

@Rich.T: 谢谢你

赵老汉 | 园豆:2 (初学一级) | 2016-03-25 14:29

@玉赛: 非常感谢

赵老汉 | 园豆:2 (初学一级) | 2016-03-25 14:53
其他回答(1)
0

把你查询的所有逻辑移到db上就完了。这种逻辑你代码优化的再好也就微秒级的提升,你把分页及相关join操作拿到db上去完成那就是秒级的提升了。

Daniel Cai | 园豆:10424 (专家六级) | 2016-03-25 13:57
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册