【前言】
尘封半年之久的机房合作再次被鹅大组长提上日程,为了积极响应组长的号召最近两日在噼里啪啦的弄机房!逐渐追回了开始合作时信誓旦旦的宣言(详情点击《机房收费系统合作版:开始团队合作之旅》),有木有同感哈?@鹅@思!!!
【趣味横生的优化】
重新找回了当年的激情后,下面的事就好办了!相比半年前青涩的我们,这次的我们都经历了BS和项目的洗礼后,也不像当年无从下手,而是手到擒来很快界面和功能就逐渐的都出来了。不过也感激当时对需求昏天黑地的讨论,以及当时写下的文档画下的图尽管错误百出。
下面就一起谈谈在优化的时候解决一个问题。
首先先说下需求(做过机房的伙伴们可直接飘过),当登录主界面时需要给用户实时的显示当前正在上机的人数。
图示一:主界面
显示人数到不难做到,数据库中有张上下机的表,只要从数据库中读取取正在上机的记录的条数即可。但是为了增加用户的体验度,如何做到实时那?在这个问题上还是花了点心思,下面就一起展示一下我是如何想的,以及如何实现滴!
第一步:无疑当这个主界面加载时需要显示,于是乎在窗体加载的时候调用了从数据库查的来显示。
代码展示:
图示二:主窗体加载代码
第二步:当点击上机或下机按钮时数量会发生变化。
代码展示(这里以上机为例,下机时也相同):
图示三:上机代码
第三步:本想到第二步就大功告成,但是忽然脑海中又飘过了学生上机状态界面中的全部下机和选中下机的按钮。
图示四:学生上机状态查询界面
(1)猛一想,感觉挺简单不和第一步和第二步做的工作一样吗???正当自己在窃喜时忽感并非如此简单,第一步中加载和第二步中的上机和下机按钮执行的事件均在主窗体中,而全部下机事件和选中下机的事件则在学生上机状态查看,如何将事件触发后通知到主窗体让其更新在线人数显示那???正当冥思苦想一筹莫展时,忽然瞄到了主界面上当前时间(见图示一),这时天空飘来五个字——Timer控件监听!为何如此说,来一起看下:
当前时间显示代码展示:
图示五:当前时间显示代码
在Timer事件中加入监测上下机表中的数据变化代码展示:
图示六:Timer事件中监测数据库中上机表监测事件
心中不由的窃喜有了这个自动监听(一秒钟会去数据库中查一次上下机表显示到界面上)不仅这里的跨窗体触发解决了,而且上下机和加载里的显示人数也没有必要,即第一步和第二步可省略。
(2)窃喜之余忽然脑海中闪现出两个字—“性能”!回想起上述实现的方法,不禁背后冒出一身冷汗,每隔一秒查一次数据库,这得多消耗资源。作为一个致力于成为优秀架构师的我,绝不能将就用这种实现方法。于是果断放弃这种实现方法,换一种新的思路。
换一种心情,思路马上就来!可以通过共享变量来传递执行事件,用Timer控件来检测这个变量,如果发生变化则更新主界面上当前上机人数。这样一来不是每隔一秒被动去调一下数据库,而是主动当触发事件是改变检测变量的值,让Timer控件去检测变量,这样就大大增加了性能。
主窗体中定义标识变量代码展示:
图示七:主窗体中定义标识变量代码
全部学生下机和选中学生下机代码展示(这里以选中学生下机为例):
图示八:选中学生下机代码
主界面中Timer事件监控代码展示:
图示九:主界面中Timer事件监控代码
秉着不断追求完美的态度,又思考到全部下机时全部下机成功后才会改变主界面的变量,主界面中的Timer事就不用再去数据库中查直接为显示上机人数的label赋值为零即可,不用再去数据库中查。并且全部下机后应将主界面中遗留的上机信息给清除掉。
全部下机完善后主界面中Timer事件代码展示:
图示十:部下机完善后主界面中Timer事件代码
至此上机人数显示的实时优化暂告一段落,让我们感受一下最终效果图(以强制全部下机为例):
在主界面中上机三个人展示:
图示十一:主界面中上机三个人
最终效果展示:
图示十二:最终效果
【总结】
只有想不到没有做不到,回味这一路探索自己一直像着了魔似的有干劲,回想自己劲头为什么这么大?不得不说就是自己在测试廊坊一中以及维护考试和评教系统时,当大数据量访问时,代码如果不够好,系统轻则卡住重则崩溃,此时无数用户焦急的等待眼神深深的印在我的脑海中。
每每脑海中浮现出这些焦急等待眼神时,自己在服微软,谷歌这种国际性的公司之余,也暗自下定决心自己也要严格要求自己不断追求完美,必定自己将来也要做出让全世界人民都使用的好产品。相信只要有这股干劲,这一切即将会发生。
如果觉得《机房收费系统合作版(二):透过显示上机人数品味如何做到全心全意为人民服务》对你有帮助,请点赞、收藏,并留下你的观点哦!