影响性能的罪魁祸首

        上篇博客里写了关于网站性能优化自己的一些看法,今天主要吐槽下我们最近的一个项目,大家可能无法想象到那个速度,我们项目里面有一个页面,数据量大和业务逻辑比较复杂,优化前发布状态下打开这个页面要1至2分钟,但是如果一步步调试状态下,整个流程走下来半个多小时就过去了,其中大部分时间都浪费在等待上了。大家谁都不愿调试那个页面,但是又不得不调试他。

罪魁祸首1——IApplicationContext

        首先,我们怀疑自己写的代码有问题,一定是循环太多,但是那些循环又必不可少。然后看到有人说Nhibernate本来也影响性能,Nhibernate省去咱们写SQL语句、存储过程,且数据库移植也很方法,但通常省事的都会在另一方面补偿回来。但一想,也不可能这么慢,既然他存在,肯定不会存在不能忍受的地步,这些还都是写测试数据,但真正用的时候数据量是好几十万条,那就只能歇菜了。但是发现每次都在一个地停了好几十秒,每个方法都得经过他,这里肯定有问题,但是老杜肯定他没问题,他们和我们用的是一个框架。最后结局真是它的问题,老杜他们放的位置和我们放的不一样,他们是程序起来就只调用他一次,而我们用的这个框架是老杜他们刚开始写的,后面有改动。IApplicationContext是一个全局变量,但是我们每次都要定义一次他读取XML文件,我们改为static就明显快乐很多。

罪魁祸首2——opensession

        那个特复杂的页面,他们D层查询的都是一个方法,后来发现他每次都是opensession,也就是说他每次都打开一个session,改为GetCurrentSession后就解决了内存溢出问题,session如果不关闭就会有内存溢出风险。opensession和GetCurrentSession的区别是:

        opensession是每次都打开新的session,他必须手动关闭,不如就会有内存溢出风险。

        GetCurrentSession是获取当前的session,如果当时没有session,则会创建新的session。GetCurrentSession会自动关闭session,他也必须进行事物管理,不如会报错。

        上面两个就是我们最主要的两个问题,经过这次,对全局变量慎用的了解映像更深刻。

你可能感兴趣的:(影响性能的罪魁祸首)