Visual studio 2005 缓存技术助E8.Net工作流2008 经历巨大处理能力挑战。

Visual studio 2005 缓存技术助E8.Net工作流2008 经历巨大处理能力挑战。

   回顾E8.Net工作流的发展历程,2004-2005年经历了某省邮政局全体管理人员使用的办公自动化系统考验后,E8的处理能力提到过非常大的提升,之后几十个200-2000之间用户数的系统,日处理流程实例数在100 -400之间的系统基本上性能体验很流畅,2006年底某市邮政局185综合服务系统采用E8.Net工作流系统处理EMS揽收、电子商务、通行证签注、淘宝网物流配送。。。。刚开始的时候40个台席,日均处理流程数量是700左右。 随着业务的扩展及应用模式的成熟,到2007年年底时已经达到200个台席,B/S架构系统日均处理流程数量达12000单每日。这个过程也是E8.Net工作流2008版本的成长过程。其中Visual studio 2005中的SQL 缓存依赖技术是E8工作流经历这种挑战用到的比较重要的技术之一。

  大家知道CACHE技术是.net中一个非常有价值的技术,。NET20支持SqlCacheDependency 可以使CACHE依赖数据库表的变化而失效,保证获取最有效的数据,但可以减少数据库CPU压力。E8中用到的相关技术总结一下与大家分享。

优化思路回顾:

   1、将操作调用频繁,数据很少变化,实时性要求不严格的数据库相关操作改为内存数据库处理模式操作,利用CACHE技术和 SqlCacheDependency 技术。构造相关数据的内存数据模型。提高计算效率并减少数据库处理压力。

   2、调整流程模型数据、组织结构数据变化更新少数几个数据表,使SqlCacheDependency CACHE依赖的表比较集中,保证CACHE缓存检测的效率

   3、为内存数据提供强制失效的处理接口,保证相关数据变化后,重新加载内存数据

   。。。。。。

范例代码:

 

string  Key  =   "xxxxxx Cache_ "   +  CacheName.ToLower();
            
string  strSQL  =   "" ;
            
bool  blnConstraint  =   false ;      // 为SQL缓存依赖添加 强制取消的功能
             if  (sCacheSource  ==   string .Empty)
            
{
                sCacheSource 
= System.Configuration.ConfigurationSettings.AppSettings["SqlCacheDataSource"]; 
            }

            DataTable dt 
=   null ;
            SqlCacheDependency scd;


            
// 判断SQL缓存依赖添加 强制取消
            
//  通过外部程序相关 cache 赋值的方式               switch (CacheName.ToLower())
             {
                
case "app":
                    
break;
                
case "masteruserdept":
                 ..
                
case "user":
                 ..
                    
break;
                
case "dept":
                    
//判断dept变化
                    .
                    
break;
                
case "actorcond":
                
case "flowmodelall":
                
case "flowmodelnodesall":
                
case "flowmodel":
                
case "flowmodelnodes":
                    
//判断FLOWMODEL变化
                    .
                    
break;
                
default:

                    
break;
            }


            

          

            
if  (HttpRuntime.Cache[Key]  ==   null )
            
{
                
//取数据
                try
                
{
                    
switch (CacheName.ToLower())
                    
{
                        
case "app":
                            strSQL 
= "SELECT * FROM xxxxx ";
                            dt 
= MyDataBase.QueryDataTableByStr(strSQL);

                            scd 
= new SqlCacheDependency(sCacheSource, "es_app");
                            HttpRuntime.Cache.Insert(Key, dt, scd);
                            
break;
                        
                        
case "user":
                            
//必须考虑历史情况
                                                        strSQL = "SELECT * FROM xxxxx ";
                            dt 
= MyDataBase.QueryDataTableByStr(strSQL);

                            scd 
= new SqlCacheDependency(sCacheSource, "ts_user");
                            HttpRuntime.Cache.Insert(Key, dt, scd);
                            
                            
break;
                        
case "dept":
                            
//必须考虑历史情况
                                                        strSQL = "SELECT * FROM xxxx"
                            dt 
= MyDataBase.QueryDataTableByStr(strSQL);

                            scd 
= new SqlCacheDependency(sCacheSource, "ts_dept");
                            HttpRuntime.Cache.Insert(Key, dt, scd);
                            
break;
                        
case "masteruserdept":
                          .
                            
break;
                        
case "flowmodelnodes":
                            .                            
break;
                        
case "flowmodelall":
                            .
                            
break;
                        
default:
                            
                            
break;
                    }


                    
                }

                
catch(Exception e)
                
{
                    dt 
= null;
                    
//如果有错误发生配置一下 SQL 缓存
                  

                }

                
            }

            
else
            
{
                
//从缓存中取值
                dt= (DataTable)HttpRuntime.Cache[Key];
            }

            
return  dt;


  在这里感谢客户提供的思路。

E8.Net工作流平台为.Net企业应用开发提供了一个起点。E8.Net工作流提升企业战略执行力,欢迎访问: http://www.feifanit.com.cn/productFlow.htm

 QQ 群: 48132184 53284682
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值