zoukankan      html  css  js  c++  java
  • 前天进行了一次程序优化的过程和心得

    ------------------------------
    项目是ASP.NET+Oracle的收费系统
    同时使用的用户大概有20多个
    前段时间运行基本正常
    ------------------------------
    前天客户抱怨收费系统速度很慢,在现场的同时看了服务器的状态发现Oracle的CPU占用率一直保持在100%。开始没有往程序的问题上考虑,主要想是否是服务器的问题,或者Oracle的问题。过了一个上午到中午下班的时候CPU降了下来。所以我怀疑是存储过程需要优化。我看了收费系统的日志,最近主要是几个房产营业所在收费,因为到了收费高峰期。
    收费和打印发票的模块基本流程如下:
    1.输入客户编码,从数据库中找到需要缴费的客户和需要缴费的账单
    2.选择相应的账单收费处理
    3.点击打印发票按钮,跳出来打印发票对话框
    4.对话框显示用户已经缴清的费用(打开对话框的时候从数据库中取得),选择需要打印的发票条目
    5.点击打印发票 调用.Net控件 从服务器中取得相应的发票信息 并打印出来
    6.点击打印排水费发票 调用.Net控件 从服务器中取得相应的发票信息 并打印出来
    因为程序3.5.6.调用的存储过程基本相同,都是输入客户编号和账单日期 查询出来发票(账单)信息
    所以决定从这里入手,优化了存储过程。
    前后执行一次存储过程CPU变化

    第二天系统运行情况就好多了,用户没有再抱怨速度慢。但是看CPU占用还是比较多,目前可能可以了,但是考虑到以后的发展所以还要继续优化。这次的优化主要放在程序的结构上面,因为步骤3,5,6使用的数据基本相同,所以考虑在步骤3就保存下来结果到缓存,步骤5,6打印的时候先查找缓存,如果存在就从缓存中取数据,如果不存在再从数据库中取得。
    这样应该可以减少60%以上的数据库操作。同事担心会占用很多WEB服务器的内存,其实没有必要的,从弹出来对话框到打印两个帐单最多需要2分钟的时间,所以缓存只要保存2分钟就可以了。

    心得:
    1.8020原则,其实这个项目95%的时间在运行1%的程序,所以找到最常使用的程序进行优化,就可以达到目的。
    2.单从优化代码不能解决的问题 可以眼界再放宽一点 从优化结构的角度去考虑。

  • 相关阅读:
    JUC学习笔记--从阿里Java开发手册学习线程池的正确创建方法
    1.初识Python
    学会 Debug
    如何找出nginx配置文件的所在位置?
    一个技术人,如何做到比别人更突出
    生产环境如何快速跟踪、分析、定位问题-Java
    如何优化代码中大量的if/else,switch/case?
    UML类图几种关系的总结
    DateUtils常用方法
    如何存储和表示数字—二进制(一)
  • 原文地址:https://www.cnblogs.com/wormday/p/532515.html
Copyright © 2011-2022 走看看