关于C/S模式系统的优化一二三

最近在忙着一件一事情,系统优化,说起来只是四个字,做起来千头万续。这里说一下自己的体会,也算是留下在这世界一趟的痕迹,(其实和到处可见的到此一游没什么区别),也可能让处于困惑中的某个人豁然开朗,减少受折磨的时间。

我做的是西安某大医院(仅次于西京)急诊系统的优化,刚接手有半年时间,当年开发人员都已经翅膀硬了,出窝了。所以说,我面对的是不知道是什么?为什么,怎么办?这三个问题。可是事情遇上了,总得解决,总得给别人一个交待。那就只能拿出“舍我其谁”的劲头来.(其实,真没有人来做了,无奈呀)。

闲话休说,言归正传,来点实货。

1、本文章标明为C/s模式,是因为当前的开发主流是B/s架构,有些经验可能对B/S 模式的系统不太适用。其实户来说并不见得是什么好事,可交互性,用户体验上还是C/S模式更灵活,人性化更好。但是,对开发商来说B/S架构省时又省力,是不二选择。用户是上帝,可是写上帝的圣经是人写的,就这么简单,所以C/S模式没落,B/S架构流行。

2、系统优化思路:

2.1  整体优化,通过代码分析,许多系统设置参数都在于数据库中,在程序某处要用某参数时调用已经写好的读取函数。这样做有个好处,不用到每个客户端对照参数进行配置,只要预定义好用户角色和权限及根据用户的其实需要制定好参数后,升级程序只是DLL和EXE的事了。但是好处已经收获,代价我正在偿还,那就是系统效率。刚开始,数据库没几条数据,怎么查询怎么快,怎么方便怎么来。可是系统用了三年了,数据库积累两三百万的条目。那就是“慢慢慢”。所以前不太经意的查询该省就得省,系统配置是个基本固定的东西。后台抓SQL语句,发现大量的查询系统基本配置的语句,用一次查一次。那就把他变成查一事,用一生不行吗?  思路基本确定,怎么实现呢?方法很多,但是能用的只有一个 ”静态变量“  在配置查询类中定义静态变量,让他不随着创建对象的消失而消失就OK了,查一次后如果判断已经有值了就不再劳网络和数据库的架,它在内存的某处悄悄等着你的雨露均沾。就像是古代佳丽云集皇宫,而不是在朕需要时才劳民伤财特色人选。这样做的好处是你需要修改的只是配置文件本身,对其它代码一行也不用动。记住,你是在优化,在补天花板上漏雨的裂缝,而不让你重新做一套新房子,再好的材料和装饰手段在这里也许都是浮云。

2.2 SQL查询去重优化,原来对SQL重复查询中是感性的认识,但是只要你有得力的工具,那就会把感性变成理性,把想当然变得明目了然。这个工具就是sqldbmon ,原来是做为独立的一个程序存在着,但是下载下来用不了,只能说它没有与时具进,32位程序与64位客户端驴头不对马嘴。其实后来经过万能的百度高人指点,下载Toad for Oracle软件,才发现人家换了一身马甲,成大家闺秀之一,使用的功能与原来传说中的差不多。这个软件能够抓取应用程序实时运行中的发出的SQL语句,一点开,哗哗一大片。给大家见识一下什么内容.

复制下来后:

这可是我已经优化过程序中的查询,原来同一个启动过程,足足有两千多条,去掉重复部分,真实的查询语句有110多条。其中有好多查询完全相同,重复将近一半。有图为证。

说起这个把无用的类似的条目删除也是个技术活,用截图上 Ultra Edit 工具,快捷键是CTRL+R ,关键的地方是正则查询替换,其它的请百度。手工删除需要两小时,用这个方法只需要2分钟,用不用自己看着办。

从这里得到线索,那就是漫长而耗神的断点跟踪,发现那些多次执行的无效查询。其实无效查询产生的原因在跟踪中也能得到规律。第一个是类的继承产生,在父类中执行过一次,在子类的初始化或者Load函数又执行了一次。第二个是因变量初值变化,引发了控件的某个消息响应,在消息响应函数中做了查询。最典型的就是给控件绑定数据源时,如果原来没有绑定过,会引起控件的焦点行变更消息。而通常这种消息的响应绑定是在InitializeComponent();(VS 2010 C#) 中就已经通过界面方式操作完成的。所以,你在Load函数中给控件绑定数据源,就引发了这个消息,从而执行了其中的查询语句。但是人的智能和人工智能都有局限性。程序员不知道人工智能已经干了什么,人工智能也不知道人的智能下一步会干什么,所以人的智能在Load 函数中又干一遍人工智能已经干过的完全相同的活。类似的情况不只这一种,但是道理都不一样的。

本来想写完,二十多年没见的同学加战友喝了点小酒,很困了,要听后事如何,请听下回分解。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值