成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

實例講解.NET應用訪問數據庫的開銷問題

數據庫 SQL Server
本文將講述的是.NET應用訪問數據的開銷問題,基于的數據庫自然也是微軟的SQL Server系列。

本文將從一個實例講述.NET應用訪問數據庫的開銷問題。作者主要是從.NET應用訪問數據庫的遍歷順序改進講起。當然,與之配套的也就是我們熟悉的SQL Server數據庫。

拿今天的一個例子說話吧,那就表中存放的是全國的地域信息,表結構如下:

SQL Sever 2005表結構

 首先用代碼生成器和存儲過程生成器生成基本表的操作,推薦兩個工具:動軟.Net代碼生成器- 全功能的三層架構.Net代碼生成器和codeplex上面的一個存儲過程生成工具Stored Procedure Generator (for SQL Server 2000/2005 ... 。

現在提供了一個方法,可以獲取***和二級地域的信息,最開始的做法是先獲取***的地域信息,然后循環***地域信息,獲取它的子節點。

  1. List<KB.DSN.Entity.District> topDistrictList = new List<KB.DSN.Entity.District>();  
  2.             KB.DSN.BusinessAccess.District dictrictBll = new KB.DSN.BusinessAccess.District();  
  3.             topDistrictList = dictrictBll.GetEntityList(string.Format("DisFatherCode='{0}' {1}", 0, Settings.District_Order_By));  
  4.  
  5.             foreach (KB.DSN.Entity.District dis in topDistrictList)  
  6.             {  
  7.                 dis.ChildrenDis = dictrictBll.GetEntityList(string.Format("DisFatherCode='{0}' {1}", dis.DisCode, Settings.District_Order_By));  
  8.  
  9.             }  
  10.             return topDistrictList; 

上面的做法,可以實現功能,***測試獲取一級和二級的地域信息,花費時間5秒左右,不說能接受吧,起碼可以忍受。HttpWatch: An HTTP Viewer and HTTP Sniffer for IE and Firefox 這個工具可以查看瀏覽器獲取數據的時間。

后面又寫了一個方法,可以根據地域編號和想要獲取的層級數目,獲取指定地域下面的N層地域。和上面差不多,完成后一次是,一次獲取上海下面的二級花費10秒,獲取三級50秒。這好像就不能忍受了吧。

然后進行優化,代碼如下,變成一次獲取二級的數據,然后用C#代碼來生成層級關系。

  1. List<KB.DSN.Entity.District> districtList = new List<KB.DSN.Entity.District>();  
  2.             KB.DSN.BusinessAccess.District dictrictBll = new KB.DSN.BusinessAccess.District();  
  3.             districtList = dictrictBll.GetEntityList(string.Format(" {0} {1}", Settings.Get_Top_And_Second_District_Where,  
  4.                 Settings.District_Order_By));  
  5.             var top = from c in districtList  
  6.                       where c.DisFatherCode.Trim() == "0"  
  7.                       select c;  
  8.             var second = from c in districtList  
  9.                          where c.DisFatherCode.Trim() != "0"  
  10.                          select c;  
  11.  
  12.             foreach (KB.DSN.Entity.District dis in top)  
  13.             {  
  14.                 var se = from c in second  
  15.                          where c.DisFatherCode == dis.DisCode  
  16.                          select c;  
  17.                 dis.ChildrenDis = se as List<KB.DSN.Entity.District>;  
  18.             }  
  19.             return top as List<KB.DSN.Entity.District>

作者后續

提到數據庫的訪問,尤其是遞歸層級調用問題,應該減少往返數據庫的次數,而是從數據庫將所需數據一次性獲取出來,然后在C#代碼中處理成樹形層級關系,這樣會提升很大的效率。

其實遞歸這種東西,用在數值計算中還可以,如果是復雜處理就***不用了,很消耗CPU和內存的,因為要使用棧存放很多內容。只是代碼看起來好理解,量大、操作復雜還是轉成非遞歸的好。

如果層級不多,變化不大,可以考慮使用緩存,效率就會更高。具體緩存的應用可以參看李天平的:系統緩存全解析 ,后面我可能也會寫一兩篇這方面的文章。

上一篇我們討論的數據是全國的行政地域信息,它有固定的格式。每個行政區劃的編碼長度都是12位,總共分5級來管理,前兩位代表31個?。ㄖ陛犑校髢晌淮硪话愕氖校ㄖ荩?,往后兩位代表市中的區(縣),往后三位是街道辦事處,***三位是居民委員會(社區)。

系統中其實有很多類似的類型編碼都被 放在數據庫中,有的是一級的,有的是分層級關系的。就像上面的地域信息,全國的5級總共有8萬左右條數據。***的辦法是一次將他們讀取到服務器的內存中,形成樹形層級,放在緩存中,如果有需要就直接獲取返回給客戶端,這樣可以較少很多的數據庫消耗。當然,前提是這類信息的變動很小,幾乎沒有變化。系統緩存全解析6:數據庫緩存依賴 中介紹了,可以使用數據庫依賴緩存,這樣就不怕數據庫內容有變化了,如果有變化,會自動更新緩存。緩存的正確使用,可以極大的提供效率

原文標題:NET應用訪問數據庫之數據庫的開銷問題

鏈接:http://www.cnblogs.com/virusswb/archive/2010/03/05/1679383.html

【編輯推薦】

  1. 淺談如何在SQL Server中生成腳本
  2. SQL Server使用索引實現數據訪問優化
  3. SQL Server 05數據庫被置為“可疑”的解決方法
  4. 詳解SQL Server的版本區別及選擇
  5. SQL Server不存在或拒絕訪問故障的排除

 

 

 

責任編輯:彭凡 來源: 博客園
相關推薦

2009-10-29 17:33:51

VB.NET線程方法

2010-04-14 15:45:49

Oracle 數據庫

2010-05-20 14:52:42

MySQL數據庫

2010-06-07 15:09:44

訪問MySQL數據庫

2009-10-12 16:08:14

VB.NET訪問注冊表

2011-07-05 16:08:10

2010-06-17 22:22:24

2011-05-20 08:54:35

PostgreSQL

2011-03-22 12:38:21

DB2數據庫游標循環

2009-07-29 09:12:31

ASP.NET數據庫連

2010-04-13 10:55:35

Oracle數據庫

2011-04-06 09:59:00

MySQL數據庫主從復制

2010-06-10 10:57:57

2009-10-28 16:47:26

VB.NET訪問數據庫

2010-05-24 17:42:44

MySQL數據庫

2010-06-01 14:42:55

連接MySQL數據庫

2011-08-18 10:36:24

SQL ServerISNULL函數

2009-12-24 10:37:03

ADO.NET訪問數據

2010-06-11 13:22:32

2009-12-23 15:53:36

ADO.NET訪問數據
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩亚洲欧美一区 | 日韩中文字幕高清 | 久草视频网站 | 一级aaaa毛片 | 四虎成人免费电影 | 国产精品免费一区二区三区 | 日韩欧美一区二区三区免费观看 | 一区二区三区中文字幕 | 91传媒在线观看 | 久久精品免费看 | 欧美a在线看 | 97人人澡人人爽91综合色 | 狠狠色狠狠色综合系列 | 成人伊人| 日韩欧美三级在线 | 四虎影院久久 | 午夜在线小视频 | 久久久91精品国产一区二区三区 | 黄视频网址 | 久久精品网 | 亚洲国产精品99久久久久久久久 | 色噜噜亚洲男人的天堂 | 久久久精品一区二区三区 | 黄色大片免费观看 | 国产精品国产三级国产a | 久久在线视频 | 男女视频在线观看免费 | 国产九九九 | 亚洲美女在线一区 | www.久久| 欧美精品久久久 | 天堂一区二区三区 | 91精品国产色综合久久不卡98 | 国产成人一区二区三区电影 | 亚洲一区二区三区在线视频 | 手机av网 | 国产a一区二区 | 亚洲视频免费观看 | 久久88| 久久一级大片 | 亚洲高清一区二区三区 |