当系统有100个人同时用,每天8小时,每一分钟点2个页面,每个页面有20条记录,若程序处理得不好,这个数据库的I/O压力也是很大。若这个服务器上原本就跑着一个非常复杂的系统,本来系统的性能,数据库的压力就很大了,再加一个应用上去,那就很可能服务器更容易崩溃了。接着服务器可能会进入恶性循环每个服务都超时,程序的稳定性也面临一大堆性能导致的严峻问题。
100 * 8 * 60 * 2 * 20 = 192 0000 , 很可能由于程序写的性能不太好,硬盘的寿命也受到影响,本来可以用8年的硬盘5年就挂了,读写太频繁了,哈哈
所以在不追加硬件投资的前提下就需要不断优化程序的运行性能,电脑硬件的贬值速度大家都懂的,今年购买个10万的硬件服务器,明年你想5万卖出都很难了,很可能3年后就是废铜烂铁一大堆了,当然这也不是绝对的,只是打了个比喻。
下面我们通过一个选项表的缓存处理效果
.Web 可以理解为专门为Web项目优化的代码部分
程序里用到了Linq,Cach
下面是缓存优化的代码,欢迎高手点评,有错就改,不能当太固执的开发人员,程序员大多倔强得很
//-----------------------------------------------------------------
// All Rights Reserved , Copyright (C) 2012 , Hairihan TECH, Ltd.
//-----------------------------------------------------------------using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Caching;namespace DotNet.Business
{using DotNet.Utilities;/// /// BaseItemDetailsManager/// 选项管理/// /// 修改纪录/// /// 版本:1.0 2012.12.13 JiRiGaLa 选项管理从缓存读取,通过编号显示名称的函数完善。/// /// 版本:1.0/// /// JiRiGaLa/// 2012.12.13/// /// public partial class BaseItemDetailsManager{#region private static List GetEntityList(string tableName) 获取选项表明细,从缓存读取/// /// 获取选项表明细,从缓存读取/// private static List GetEntityList(string tableName){if (HttpContext.Current.Session == null || HttpContext.Current.Cache[tableName] == null){lock (BaseSystemInfo.UserLock){if (HttpContext.Current.Session == null || HttpContext.Current.Cache[tableName] == null){// 读取目标表中的数据List entityList = null;BaseItemDetailsManager itemDetailsManager = new DotNet.Business.BaseItemDetailsManager(tableName);entityList = itemDetailsManager.GetList();// 这个是没写过期时间的方法// HttpContext.Current.Cache[tableName] = entityList;// 设置过期时间为8个小时,第2天若有不正常的自动就可以正常了HttpContext.Current.Cache.Add(tableName, entityList, null, DateTime.Now.AddHours(8), TimeSpan.Zero, CacheItemPriority.Normal, null);}}}return HttpContext.Current.Cache[tableName] as List;}#endregion#region public static string GetItemName(string tableName, string itemCode) 通过编号获取选项的显示内容/// /// 通过编号获取选项的显示内容/// 这里是进行了内存缓存处理,减少数据库的I/O处理,提高程序的运行性能,/// 若有数据修改过,重新启动一下程序就可以了,这些基础数据也不是天天修改来修改去的,/// 所以没必要过度担忧,当然有需要时也可以写个刷新缓存的程序/// /// 选项表名/// 选项编号/// 显示值public static string GetItemName(string tableName, string itemCode){string returnValue = itemCode;if (!string.IsNullOrEmpty(itemCode)){List entityList = GetEntityList(tableName);BaseItemDetailsEntity itemDetailsEntity = entityList.FirstOrDefault(entity => !string.IsNullOrEmpty(entity.ItemCode) && entity.ItemCode.Equals(itemCode));if (itemDetailsEntity != null){returnValue = itemDetailsEntity.ItemName;}}return returnValue;}#endregion}
}
这个是在Web里调用的方法
这个是具体的编码表里的存储结构,例如我们数据库里保存了1, 页面上展示的是 “一级”。
虽然上面的程序都非常简单,但是把以前庞大的系统,想怎么优化就怎么优化,想怎么改进就怎么改进,还是需要一定的思路,如何架构系统更简单,如何才能别人更容易看懂我们的系统源码,可以在最短的时间里能灵活模仿掌握,这也很头痛的事情,毕竟系统架构太复杂了,学习掌握太困难了,如何才能方便大批量生产,又简单又好用。
其实谁都不想跟自己过不去越简单越好,都想早点儿回家陪陪家人,陪陪老婆婆孩子,过个真正的和谐生活,快乐家庭生活。
周末了大家都工作累了,来个美女图欣赏一下。