首页 新闻 会员 周边

关于用户登录时的数据读写优化。

0
悬赏园豆:10 [已解决问题] 解决于 2020-06-16 16:30

如题:
现在是这样,公司原本的老项目,在一个客户那里出现的问题,客户公司每天8点半上班,会有40人左右同时登录系统。从而会出现个别用户登录超时,用户登录需要1分钟左右才能进系统。
登录的代码是公司同事在7年以前写的,貌似后来改动的很少。
看代码,发现登录的时用了TransactionScope。并且在事务中做了以下操作:
1、查询数据库对比用户密码;
2、更新用户最新登录时间;
3、插入、更新用户登录记录
4、查询用户角色并保存(foreach循环);
5、查询用户部门并保存(foreach循环);
6、查询岗位并保存(foreach循环);
7、查询用户组并保存(foreach循环);
8、将用户信息写入cookie;

做为一个搞开发的,登录这种操作,两三秒都闲慢了,现在居然需要几十秒到1分钟,简直不能忍。
所以现在想请教一下大神,有没有好的优化方法,可以对这个登录操作进行更好的优化。

ps: 早上临时将更新用户登录时间和更新用户登录记录的两个方法给注释,让用户勉强可以登录进去。

Vincent8464的主页 Vincent8464 | 初学一级 | 园豆:17
提问于:2018-11-09 11:48
< >
分享
最佳答案
0

1. 去掉TransactionScope

2. 查看更新的SQL语句的where条件是否添加了索引

3. 4个foreach循环改写成一个视图,直接一个查询搞定四步操作

收获园豆:10
大志若愚 | 老鸟四级 |园豆:2138 | 2019-01-08 18:09
其他回答(5)
0

是什么原因导致的?我很好奇,是数据量太大吗?用户、角色,部门这些表能有多少数据呀?

会长 | 园豆:12401 (专家六级) | 2018-11-09 12:09

数据量不大,总共也就四五十个用户,感觉就是TransactionScope导致的,但是不知道还没有没有其他的原因

支持(0) 反对(0) Vincent8464 | 园豆:17 (初学一级) | 2018-11-09 12:46
0

有ip吗...这个你可以留着,那天公司对你不好你就登录几十次就行了,这个还合情合理

花飘水流兮 | 园豆:13560 (专家六级) | 2018-11-09 12:22

。。。。。。 永远都觉得公司对自己不好怎么办?

支持(0) 反对(0) Vincent8464 | 园豆:17 (初学一级) | 2018-11-09 12:45

我也想试试

支持(0) 反对(0) DNLi | 园豆:316 (菜鸟二级) | 2018-11-09 13:39
0

这些操作完全可以不用 TransactionScope ,去掉这个。

fangq | 园豆:417 (菜鸟二级) | 2018-11-09 12:39

这个可以,还有其他的么

支持(0) 反对(0) Vincent8464 | 园豆:17 (初学一级) | 2018-11-09 12:45
0

问题写得这么详细确实不容易了。
好的优化方法就是像你这么细心,一个个问题找下去,你就会成为大神的。
哪些操作是不必要的,哪些操作是过渡设计,哪些操作是可以乐观锁,,哪些操作是不必使用事务的。
这些都是新手不会去考虑的。
一般这种客户不可能给很多钱,所以瞎写一个很正常的,反正并发也不多,一分钟也能忍受。

爱编程的大叔 | 园豆:30839 (高人七级) | 2018-11-09 12:51

问题是现在用户不想忍受了,三天两头跟售后说这个事儿,唉

支持(0) 反对(0) Vincent8464 | 园豆:17 (初学一级) | 2018-11-09 13:40

@h_Vincent: 对的啊,要不然招你做啥?
这种事情你就别指望能找人帮忙了,老老实实看代码,
你这样说没人能给你说两句话就能解决的。
再厉害的人也是得看到实际的场景,实际的代码,数据库,服务器,内存
日志,各种各样的信息,才能知道怎么解决,也许很简单,也许很复杂。

当然,也不排除你们公司钱多,愿意花钱请外援的可能。

支持(0) 反对(0) 爱编程的大叔 | 园豆:30839 (高人七级) | 2018-11-09 15:29
0

我相信写这个登录的人一定是个大神。

徒然喜欢你 | 园豆:1741 (小虾三级) | 2018-11-09 13:16
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册