程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> Visual studio 2005 緩存技術助E8.Net工作流2008 經歷巨大處理能力挑戰。

Visual studio 2005 緩存技術助E8.Net工作流2008 經歷巨大處理能力挑戰。

編輯:.NET實例教程

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中一個非常有價值的技術,。NET2。0支持SqlCacheDependency ,可以使CACHE依賴數據庫表的變化而失效,保證獲取最有效的數據,但可以減少數據庫CPU壓力。E8中用到的相關技術總結一下與大家分享。

優化思路回顧:

   1、將操作調用頻繁,數據很少變化,實時性要求不嚴格的數據庫相關操作改為內存數據庫處理模式操作,利用CACHE技術和 SqlCacheDependency 技術。構造相關數據的內存數據模型。提高計算效率並減少數據庫處理壓力。

   2、調整流程模型數據、組織結構數據變化更新少數幾個數據表,使SqlCacheDependency CACHE依賴的表比較集中,保證CACHE緩存檢測的效率

   3、為內存數據提供強制失效的處理接口,保證相關數據變化後,重新加載內存數據

   。。。。。。

范例代碼:


string Key = "xxxxxxCache_" + 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;


  在這裡感謝客戶提供的思路。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved