2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩40頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、DotNet架構(gòu)設(shè)計和性能優(yōu)化,,.Net 分層結(jié)構(gòu),Microsoft 最近幾年為降低企業(yè)范圍內(nèi)應(yīng)用程序的復(fù)雜性而開發(fā)了這個結(jié)構(gòu)。這一模型有時被稱為“多層結(jié)構(gòu)”(Multitier),原因是它可以非常容易地按照邏輯分組來加以理解。,企業(yè)級模板和多層分布式應(yīng)用程序,分層結(jié)構(gòu)模型,用戶界面層,用戶服務(wù)是指在應(yīng)用程序中實(shí)現(xiàn)的客戶端,包括 Web 客戶端或 Windows 客戶端。管理 Web 頁或 Windows 界面的呈現(xiàn)和行為 顯

2、示數(shù)據(jù) 捕獲數(shù)據(jù) 數(shù)據(jù)驗(yàn)證檢查 為用戶提供任務(wù)指南 向“業(yè)務(wù)外觀”發(fā)送用戶輸入 從“業(yè)務(wù)外觀”接收結(jié)果 向用戶顯示錯誤,業(yè)務(wù)外觀層,向基礎(chǔ)業(yè)務(wù)對象提供一致的接口,并將客戶端同基礎(chǔ)業(yè)務(wù)邏輯的更改隔離開。該塊存在時,它活躍于 WebUI 客戶端(或 WinUI 客戶端)與業(yè)務(wù)邏輯層之間。從“用戶服務(wù)”層(Windows 用戶界面或 Web 用戶界面客戶端應(yīng)用程序)接收用戶輸入。 如果請求需要對數(shù)據(jù)進(jìn)行只讀訪問,則可能使用“數(shù)

3、據(jù)訪問”層。 將請求傳遞到“業(yè)務(wù)規(guī)則”層。 將響應(yīng)從“業(yè)務(wù)規(guī)則”層返回到“用戶服務(wù)”層。 在對“業(yè)務(wù)規(guī)則”層的調(diào)用之間維護(hù)臨時狀態(tài)。,業(yè)務(wù)規(guī)則,包含業(yè)務(wù)對象本身以及應(yīng)用于它們的規(guī)則。這也是主要業(yè)務(wù)對象所在的位置。它們實(shí)現(xiàn)業(yè)務(wù)實(shí)體或系統(tǒng)對象。系統(tǒng)的業(yè)務(wù)規(guī)則將在這些對象中編碼,盡管部分業(yè)務(wù)規(guī)則可能實(shí)際上已在數(shù)據(jù)庫的存儲過程和觸發(fā)器中進(jìn)行了編碼。從“業(yè)務(wù)外觀”層接受請求。 根據(jù)編碼的業(yè)務(wù)規(guī)則處理請求。 使用“數(shù)據(jù)訪問”層從“數(shù)據(jù)服

4、務(wù)”層獲取數(shù)據(jù)或?qū)?shù)據(jù)發(fā)送到“數(shù)據(jù)服務(wù)”層。 將處理結(jié)果傳遞回“業(yè)務(wù)外觀”層。,數(shù)據(jù)訪問層,執(zhí)行從數(shù)據(jù)庫(或其他數(shù)據(jù)服務(wù))獲取數(shù)據(jù)或向數(shù)據(jù)庫發(fā)送數(shù)據(jù)的功能。從“業(yè)務(wù)規(guī)則”層接收請求,從“數(shù)據(jù)服務(wù)”獲取數(shù)據(jù)或向其發(fā)送數(shù)據(jù)。 使用存儲過程獲取數(shù)據(jù),并可選用 ADO.NET 向數(shù)據(jù)庫發(fā)送數(shù)據(jù)。 將數(shù)據(jù)庫查詢結(jié)果返回到“業(yè)務(wù)規(guī)則”層,作為強(qiáng)類型的 ADO.NET 數(shù)據(jù)集。,系統(tǒng)框架層,提供系統(tǒng)服務(wù)、系統(tǒng)基礎(chǔ)結(jié)構(gòu)功能或其他共享功能的應(yīng)用程

5、序的組件。這一功能可能不是特定于任何給定的應(yīng)用程序的。可能包括 HTML 頁緩存服務(wù)或?qū)ο蟛樵兙彺妫Q服務(wù)/負(fù)載平衡服務(wù))?!跋到y(tǒng)框架項(xiàng)目”層可由結(jié)構(gòu)中的任何層使用。此外,強(qiáng)類型的數(shù)據(jù)集駐留于系統(tǒng)類型層。當(dāng)某些共享功能只在一個應(yīng)用程序中使用,而其他共享功能在若干個應(yīng)用程序之間共享時,可以考慮將它們分成不同的系統(tǒng)類型項(xiàng)目。,一個具體實(shí)現(xiàn)的例子,,系統(tǒng)框架層,定義BusinessException定義公用常量、屬性和方法定義通用調(diào)

6、試環(huán)境變量,數(shù)據(jù)訪問層,底層數(shù)據(jù)訪問控件采用微軟的DataAccess組件盡晚打開,盡早關(guān)閉連接連接池由.Net進(jìn)行維護(hù)自定義的數(shù)據(jù)對象原子業(yè)務(wù)邏輯,ADO.NET 構(gòu)成,ADO.NET對象,Connection :描述與特定數(shù)據(jù)源的連接 Command :操作數(shù)據(jù)庫的數(shù)據(jù),可執(zhí)行sql命令,也可調(diào)用存儲過程DataReader :瀏覽數(shù)據(jù),從數(shù)據(jù)源中獲得只讀、只能向前訪問的數(shù)據(jù)流 DataAdapter :生成 Dat

7、aSet ,更新數(shù)據(jù)源 DataSet:多個表、約束、關(guān)系的集合,可以認(rèn)為是內(nèi)存中的數(shù)據(jù)庫DataView:對DataSet進(jìn)行過濾、排序,ADO的運(yùn)作方式,DataSet的運(yùn)作方式DataReader的運(yùn)作方式,連接漏洞,在應(yīng)用程序壓力很小的時候,數(shù)據(jù)庫連接數(shù)量持續(xù)增加,直至達(dá)到連接池大小的極限負(fù)載穩(wěn)定但比較大的情況下,應(yīng)用程序開始建立越來越多的連接很快達(dá)到最大連接數(shù)應(yīng)用程序?qū)pen方法,引發(fā)超時的異常應(yīng)用程序單個運(yùn)行很

8、好,但隨著用戶量的上升,很快速度變慢,漸漸崩潰應(yīng)用程序在壓力運(yùn)行下反應(yīng)緩慢,并顯示出數(shù)據(jù)庫機(jī)器低處理器的使用IIS或Application Server CPU空閑,數(shù)據(jù)庫服務(wù)器CPU也空閑,但是數(shù)據(jù)庫不斷發(fā)生某個庫或表的堵塞或鎖,連接字符串的秘密,ConnString=“Server=local;database=northwind;UserID=aaa;Password=bbb;connection reset=false; c

9、onnection lifetime=5;enlist=true;min pool size=1;max pool size=50;Config文件ConnectionString = ConfiguratioSettings.AppSettings(“NorthWind”) 直接使用保存在一個單獨(dú)的DLL組件中COM+ 中連接字符串加密裝置連接字符串也會影響到ADO.NET的數(shù)據(jù)庫連接池機(jī)制,ADO 連接池的算

10、法,Connection.Open 連接池機(jī)制被啟動首先檢查這個連接字符串下面是否有一個連接池.如果沒有則建立一個新的連接,并且建立一個連接池如果已經(jīng)有,那么看池中是否有連接,如果有則成功如果沒有,那么看是否達(dá)到最大連接數(shù)量,如果沒有則建立一個新的連接,池數(shù)量加1如果已經(jīng)到達(dá)池最大連接數(shù),那么等待30秒,30秒后看是否有可用連接.如果這時有那么使用這個連接,如果沒有則報錯,連接池的秘密,每個連接池可以打開的連接數(shù)量是有限的,

11、這個可以在連接字符串中進(jìn)行修改.每個數(shù)據(jù)庫Provder提供一個缺省的值,并且設(shè)置方法不同一個連接池為一個應(yīng)用程序域服務(wù),一個應(yīng)用程序域可能有一個以上的連接池。每個ASP.NET應(yīng)用程序被加載到工作進(jìn)程(aspnet_wp.exe)中的一個應(yīng)用程序域中.應(yīng)用程序域消失時池也銷毀。連接池是基于連接字符串的,不同的連接字符串會生成不同的連接池(字母大小寫)連接池也需要匹配身份,當(dāng)使用信任連接時,會鑒別不同的身份,身份不同連接池也不同.

12、調(diào)用Close或Dispose方法會將打開的連接返回到連接池.不過不調(diào)用,那么最終會被垃圾回收器銷毀,而且不會回到連接池中.,使用的原則,總是相同的連接字符串和同一數(shù)據(jù)庫通信,這將確保連接會回到同一個連接池中.總是調(diào)用Close或Dispose.這將確保使用過的連接再次回到池中.盡可能晚的打開連接,而且盡可能早的關(guān)閉.提高使用效率,避免等待引起的超時.保證每個連接的單調(diào)性.通過提交或回滾來清算所有在這個連接上的事務(wù),這樣你不會有

13、數(shù)據(jù)庫被鎖而連接限制在池中的情況.消除連接上的所有臨時對象,特別是臨時表.連接池是客戶端技術(shù),數(shù)據(jù)庫并不知道和了解它的機(jī)制.,建議,盡量多的使用存儲過程.索引加密SQL語句或用戶名密碼密碼強(qiáng)制超過8位,并且數(shù)字、字母和符號組合大塊調(diào)用,實(shí)用為主異步通信/使用Windows Services歸檔和搬移事務(wù)最小 COMInterop的大塊調(diào)用減少往返,將多個結(jié)果一次返回使用StringBuilderExecuteSc

14、alar, ExecuteNoQuery,原子業(yè)務(wù),定義對單表的操作例如:生成自增長序號INSERT INTO tbSeqBusiSerialNo (cnvcFill) VALUES ('0'); SELECT scope_identity() AS id,業(yè)務(wù)邏輯層,定義兩個統(tǒng)一的數(shù)據(jù)處理流程模板帶事務(wù)處理和不帶事務(wù)處理跨數(shù)據(jù)庫事務(wù)存儲過程,//取數(shù)據(jù)庫連接串string strDbBoss = “

15、”;//初始化輸出包DataSetdsOut = new DataSet();//連接數(shù)據(jù)庫using (SqlConnectionconn = new SqlConnection(strDbBoss)){//打開數(shù)據(jù)庫連接conn.Open(); //事務(wù)類using (SqlTransaction trans = conn.BeginTransaction(Isol

16、ationLevel.ReadCommitted,"SampleTransaction")){DASampleDASampleInst = new DASample(); //查詢類 DASampleDASampleInst = new DASample(); try {

17、 //原子事務(wù)1取操作員信息 DataTable dtOper = DASampleInst.GetOperData(conn, trans,"strOperID","strOperPwd"); if(dtOper == null ||dtOper.Rows.Count==0)

18、 throw new BusinessException("BFSample:", "E1002"); dtOper.TableName="tbOper"; dsOut.Tables.Add(dtOper); //原子事務(wù)2… //原子事務(wù)3… } catch

19、 (BusinessException bx) //業(yè)務(wù)異常 { //處理錯誤返回包 //dsOut = ReturnMsg.ErrorDataSet(bx); } catch (SqlException sqlex) //數(shù)據(jù)庫異常 { //處理錯誤返回包

20、 //dsOut = ReturnMsg.ErrorDataSet(sqlex); } catch (Exception ex) //其他異常 { //處理錯誤返回包 //dsOut = ReturnMsg.ErrorDataSet(ex);}finally //釋放連接

21、 {conn.Close();}}//返回數(shù)據(jù)return dsOut;},//取數(shù)據(jù)庫連接串string strDbBoss = “”;//初始化輸出包DataSetdsOut = new DataSet();//連接數(shù)據(jù)庫using (SqlConnectionconn = new SqlConnection(strDbBoss)){//打開數(shù)據(jù)庫連接conn.

22、Open();//查詢類SqlTransaction trans = null;DASampleDASampleInst = new DASample();try{//原子事務(wù)1取操作員信息DataTable dtOper = DASampleInst.GetOperData(conn, trans,"strOperID","strOperPwd&q

23、uot;);if(dtOper == null ||dtOper.Rows.Count==0)throw new BusinessException("BFSample:", "E1002");dtOper.TableName="tbOper";dsOut.Tables.Add(dtOper);//原子事務(wù)2…//原子

24、事務(wù)3… }catch (BusinessException bx) //業(yè)務(wù)異常{//處理錯誤返回包//dsOut = ReturnMsg.ErrorDataSet(bx);}catch (SqlException sqlex) //數(shù)據(jù)庫異常{//處理錯誤返回包//dsOut = ReturnMsg.ErrorDataSet(sqlex);}catc

25、h (Exception ex) //其他異常{//處理錯誤返回包//dsOut = ReturnMsg.ErrorDataSet(ex);}finally //釋放連接 {conn.Close();}}//返回數(shù)據(jù)return dsOut;},接口層,Remoting or Webservice,Web表現(xiàn)層,根據(jù)

26、數(shù)據(jù)庫中用戶權(quán)限表動態(tài)生成OutlookBar菜單user、right、menuitem 代碼重用:抽象web基類頁面和UserControl等(含權(quán)限控制,Session控制、顯示)等 采用Application、Session、Cache、Hashtable等進(jìn)行數(shù)據(jù)共享和性能優(yōu)化,性能優(yōu)化-頁面緩存,頁面緩存,性能優(yōu)化-變量緩存,Using ASP.NET CacheUsing web.config Variables

27、Using Session and Application VariablesSaving Session and Application Variables in a Database,ASP.NET Cache,ASP.NET Cache:在應(yīng)用程序中存儲對象和變量以便重復(fù)使用Placing Objects in ASP.NET Cache(frm8)Retrieving Objects From ASP.NET Ca

28、che,Cache.Insert("mykey", myValue, _Nothing, DateTime.Now.AddHours(1), _TimeSpan.Zero),myValue = Cache("mykey")If myValue Nothing Then DisplayData(myValue)End If,使用web.config變量(frm11),在 web

29、.config存儲變量在.aspx或Global.asax文件中調(diào)用, ,Dim appSetting As NameValueCollection Dim strConn As StringappSetting = CType(Context.GetConfig _("appsettings"), NameValueCollection )strConn = appSetting(&

30、quot;pubs").ToString(),使用Session和Application變量,Session 為每個不同用戶存儲變量 Application 存儲的變量是所有用戶共用的,Sub Session_Start(s As Object, e As EventArgs) Session("BackColor") = "beige" Session(

31、"ForeColor") = "black"End Sub,Sub Application_Start(s As Object, e As EventArgs) Application("NumberofVisitors") = 0End Sub,性能優(yōu)化-內(nèi)存中的檢索,內(nèi)存檢索:DataSet:檢索用find,不能用fielter或SelectArraylist

32、兩級 HashTable存儲用戶資料、參數(shù)、套餐等操作間數(shù)據(jù)交換:文件瓶頸在數(shù)據(jù)庫存儲保留文件,便于回退和錯誤處理避免不穩(wěn)定,性能優(yōu)化-SessionState,當(dāng)不使用會話狀態(tài)時禁用它。 需要訪問會話變量,但不打算創(chuàng)建或修改它們,則將 @ Page 指令中的 EnableSessionState 屬性設(shè)置為 ReadOnly,性能優(yōu)化-ServerControl,在適當(dāng)?shù)沫h(huán)境中使用 ASP.NET 服務(wù)器控件 只在必要

33、時保存服務(wù)器控件ViewStateViewState服務(wù)器控件的功能,該功能使服務(wù)器控件可以在往返過程上重新填充它們的屬性值(您不需要編寫任何代碼)。因?yàn)閂iewState在隱藏的窗體字段中往返于服務(wù)器,所以該功能確實(shí)會對性能產(chǎn)生影響。您應(yīng)該知道在哪些情況下視圖狀態(tài)會有所幫助,在哪些情況下它影響頁的性能。,性能優(yōu)化-不要依賴代碼中異常,異常大大地降低性能,所以您不應(yīng)該將它們用作控制正常程序流程的方式。不要在處理該狀態(tài)之前捕獲異常本身

34、。 try { result = 100 / num; } catch (Exception e) { result = 0; } if (num != 0) result = 100 / num; else result = 0;,性能優(yōu)化-數(shù)據(jù)庫SQL,使用存儲過程SqlDataReader 類用于快速只進(jìn)數(shù)據(jù)游標(biāo) 日志、索引和數(shù)據(jù)文件分

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論