zl程序教程

您现在的位置是:首页 >  .Net

当前栏目

现在物价虽然高得离谱,但是内存条都白菜价格了,需要调整程序架构的思维“与时俱进” --- 改进系列之二

2023-02-18 15:37:29 时间

   当系统有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; /// <remarks> /// BaseItemDetailsManager /// 选项管理 /// /// 修改纪录 /// /// 版本:1.0 2012.12.13 JiRiGaLa 选项管理从缓存读取,通过编号显示名称的函数完善。 /// /// 版本:1.0 /// <author> /// <name>JiRiGaLa</name> /// <date>2012.12.13</date> /// </author> /// </remarks> public partial class BaseItemDetailsManager { #region private static List<BaseItemDetailsEntity> GetEntityList(string tableName) 获取选项表明细,从缓存读取 /// <summary> /// 获取选项表明细,从缓存读取 /// </summary> private static List<BaseItemDetailsEntity> 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<BaseItemDetailsEntity> entityList = null; BaseItemDetailsManager itemDetailsManager = new DotNet.Business.BaseItemDetailsManager(tableName); entityList = itemDetailsManager.GetList<BaseItemDetailsEntity>(); // 这个是没写过期时间的方法 // 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<BaseItemDetailsEntity>; } #endregion #region public static string GetItemName(string tableName, string itemCode) 通过编号获取选项的显示内容 /// <summary> /// 通过编号获取选项的显示内容 /// 这里是进行了内存缓存处理,减少数据库的I/O处理,提高程序的运行性能, /// 若有数据修改过,重新启动一下程序就可以了,这些基础数据也不是天天修改来修改去的, /// 所以没必要过度担忧,当然有需要时也可以写个刷新缓存的程序 /// </summary> /// <param name="tableName">选项表名</param> /// <param name="itemCode">选项编号</param> /// <returns>显示值</returns> public static string GetItemName(string tableName, string itemCode) { string returnValue = itemCode; if (!string.IsNullOrEmpty(itemCode)) { List<BaseItemDetailsEntity> 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, 页面上展示的是 “一级”。

   虽然上面的程序都非常简单,但是把以前庞大的系统,想怎么优化就怎么优化,想怎么改进就怎么改进,还是需要一定的思路,如何架构系统更简单,如何才能别人更容易看懂我们的系统源码,可以在最短的时间里能灵活模仿掌握,这也很头痛的事情,毕竟系统架构太复杂了,学习掌握太困难了,如何才能方便大批量生产,又简单又好用。

   其实谁都不想跟自己过不去越简单越好,都想早点儿回家陪陪家人,陪陪老婆婆孩子,过个真正的和谐生活,快乐家庭生活。

   周末了大家都工作累了,来个美女图欣赏一下。