热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

当系统有100个人同时用,每天8小时,每一分钟点2个页面,每个页面有20条记录,若程序处理得不好,这个数据库的

   当系统有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, 页面上展示的是 “一级”。

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

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

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转:https://www.cnblogs.com/jirigala/archive/2012/12/14/2817946.html



推荐阅读
  • 本文详细介绍了在PHP中如何获取和处理HTTP头部信息,包括通过cURL获取请求头信息、使用header函数发送响应头以及获取客户端HTTP头部的方法。同时,还探讨了PHP中$_SERVER变量的使用,以获取客户端和服务器的相关信息。 ... [详细]
  • 在测试软件或进行系统维护时,有时会遇到电脑蓝屏的情况,即便使用了沙盒环境也无法完全避免。本文将详细介绍常见的蓝屏错误代码及其解决方案,帮助用户快速定位并解决问题。 ... [详细]
  • 本文探讨了如何在PHP与MySQL环境中实现高效的分页查询,包括基本的分页实现、性能优化技巧以及高级的分页策略。 ... [详细]
  • 在使用 Nginx 作为服务器时,发现 Chrome 能正确从缓存中读取 CSS 和 JS 文件,而 Firefox 却无法有效利用缓存,导致加载速度显著变慢。 ... [详细]
  • iOS 小组件开发指南
    本文详细介绍了iOS小部件(Widget)的开发流程,从环境搭建、证书配置到业务逻辑实现,提供了一系列实用的技术指导与代码示例。 ... [详细]
  • 本文详细介绍了跨站脚本攻击(XSS)的基本概念、工作原理,并通过实际案例演示如何构建XSS漏洞的测试环境,以及探讨了XSS攻击的不同形式和防御策略。 ... [详细]
  • 浅谈Android五大布局——LinearLayout、FrameLayout和AbsoulteLa
    为什么80%的码农都做不了架构师?Android的界面是有布局和组件协同完成的,布局好比是建筑里的框架,而组件则相当于建筑里的砖瓦。 ... [详细]
  • 本文详细介绍了PHP中的几种超全局变量,包括$GLOBAL、$_SERVER、$_POST、$_GET等,并探讨了AJAX的工作原理及其优缺点。通过具体示例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 使用jQuery与百度地图API实现地址转经纬度功能
    本文详细介绍了如何利用jQuery和百度地图API将地址转换为经纬度,包括申请API密钥、页面构建及核心代码实现。 ... [详细]
  • 在CentOS 7中部署Nginx并配置SSL证书
    本文详细介绍了如何在CentOS 7操作系统上安装Nginx服务器,并配置SSL证书以增强网站的安全性。适合初学者和中级用户参考。 ... [详细]
  • 服务器虚拟化存储设计,完美规划储存与资源,部署高性能虚拟化桌面
    规划部署虚拟桌面环境前,必须先估算目前所使用实体桌面环境的工作负载与IOPS性能,并慎选储存设备。唯有谨慎估算贴近实际的IOPS性能,才能 ... [详细]
  • Asynchronous JavaScript and XML (AJAX) 的流行很大程度上得益于 Google 在其产品如 Google Suggest 和 Google Maps 中的应用。本文将深入探讨 AJAX 在 .NET 环境下的工作原理及其实现方法。 ... [详细]
  • 本文详细介绍了在 CentOS 系统中如何创建和管理 SWAP 分区,包括临时创建交换文件、永久性增加交换空间的方法,以及如何手动释放内存缓存。 ... [详细]
  • 本文详细介绍了如何处理Oracle数据库中的ORA-00227错误,即控制文件中检测到损坏块的问题,并提供了具体的解决方案。 ... [详细]
  • 函子(Functor)是函数式编程中的一个重要概念,它不仅是一个特殊的容器,还提供了一种优雅的方式来处理值和函数。本文将详细介绍函子的基本概念及其在函数式编程中的应用,包括如何通过函子控制副作用、处理异常以及进行异步操作。 ... [详细]
author-avatar
云下拾雨
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有