




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1、 Response.Redirect(),Server.Transfer(),Server.Execute(的區(qū)另 U1、Response.Redirect():Response.Redirect方法導(dǎo)致瀏覽器鏈接到一個(gè)指定的URL當(dāng)Response.Redirect()方法被調(diào)用時(shí),它會(huì)創(chuàng)建一個(gè)應(yīng)答,應(yīng)答頭中指出了狀態(tài)代碼302 (表示目標(biāo)已經(jīng)改變)以及新的目標(biāo)URL瀏覽器從服務(wù)器收到該應(yīng)答,利用應(yīng)答頭中的信息發(fā)出一個(gè)對(duì)新URL的請(qǐng)求。這就是說(shuō),使用 Response.Redirect方法時(shí)重定向操作發(fā)生在客戶端,總共涉及到兩 次與服務(wù)器的通信(兩個(gè)來(lái)回):第一次是對(duì)原始頁(yè)面的請(qǐng)求,得到
2、一個(gè) 302應(yīng)答, 第二次是請(qǐng)求302應(yīng)答中聲明的新頁(yè)面,得到重定向之后的頁(yè)面。2、Server.TransferServer.transfer是IIS 5.0新增加的一個(gè)功能。它解決了 Response.Redirect的兩個(gè)重要 的缺陷:1)在Response.Redirect中,我們得不到任何第一頁(yè)的輸出2) Response.Redirect會(huì)丟失request中的所有屬性,當(dāng)然我們可以通過(guò)一些其 他的辦法,比如 session來(lái)搞定,可是,有些頁(yè)的參數(shù)是在request中傳過(guò)來(lái)的,這樣的話,就不行了;3) Response.Redirect需要client端再發(fā)起一個(gè)請(qǐng)求。serve
3、r.transfer就很好地解決了這些問(wèn)題。它是從 server端直接向下一頁(yè)發(fā)起請(qǐng) 求,不需要client再次發(fā)送請(qǐng)求.如果你的網(wǎng)頁(yè)非常依賴response.redirect,這個(gè)小小的改變可以提高將近25%的效率。(根據(jù)微軟文檔).Server.Transfer方法把執(zhí)行流程從當(dāng)前的ASPX文件轉(zhuǎn)到同一服務(wù)器上的另一個(gè)ASPX頁(yè)面。調(diào)用 Server.Transfer時(shí),當(dāng)前的 ASPX頁(yè)面終止執(zhí)行,執(zhí)行流程轉(zhuǎn)入另一個(gè)ASPX頁(yè)面,但新的 ASPX頁(yè)面仍使用前一 ASPX頁(yè)面創(chuàng)建的應(yīng)答流。如果用Server.Transfer方法實(shí)現(xiàn)頁(yè)面之間的導(dǎo)航,瀏覽器中的URL不會(huì)改變,因?yàn)橹囟ㄏ蛲耆?/p>
4、服務(wù)器端進(jìn)行,瀏覽器根本不知道服務(wù)器已經(jīng)執(zhí)行了一次頁(yè)面變換。默認(rèn)情況下,Server.Transfer方法不會(huì)把表單數(shù)據(jù)或查詢字符串從一個(gè)頁(yè)面?zhèn)鬟f 到另一個(gè)頁(yè)面,但只要把該方法的第二個(gè)參數(shù)設(shè)置成True,就可以保留第一個(gè)頁(yè)面的表單數(shù)據(jù)和查詢字符串。同時(shí),使用Server.Transfer時(shí)應(yīng)注意一點(diǎn):目標(biāo)頁(yè)面將使用原始頁(yè)面創(chuàng)建的應(yīng) 答流,這導(dǎo)致 ASPNET的機(jī)器驗(yàn)證檢查(MachineAuthentication Check , MAC)認(rèn)為新頁(yè)面的 ViewState已被篡改。因此,如果要 保留原始頁(yè)面的表單數(shù)據(jù)和查詢字符串集合,必須把目標(biāo)頁(yè)面Page指令的 EnableViewState
5、Mac 屬性設(shè)置成 Falseserver.Transfer(泊一個(gè)不足就是:當(dāng)用戶在 a.aspx中提交了一個(gè)表單,然后用Server.Transfer(進(jìn)入b.aspx,這時(shí)如果用戶刷新一下頁(yè)面,瀏覽器便會(huì)問(wèn)用戶是否“重試”發(fā)送表單,如果用戶點(diǎn)擊“是” ,那么,表單中 的數(shù)據(jù)被重新發(fā)送到服務(wù)器。如發(fā)送表單的作用就是為了向數(shù)據(jù)庫(kù)中插入一條記錄,結(jié)果導(dǎo)不希望發(fā)生的事一一同一表單被多次加入到數(shù)據(jù) 庫(kù)中。3、Server.ExecuteServer.Execute方法允許當(dāng)前的 ASPXM面執(zhí)行一個(gè)同一 Web服務(wù)器上的指定 ASPX 頁(yè)面,當(dāng)指定的 ASPX頁(yè)面執(zhí)行完畢,控制流程重新返回原頁(yè)面發(fā)
6、出Server.Execute調(diào)用的位置。這種頁(yè)面導(dǎo)航方式類似于針對(duì)ASPX頁(yè)面的一次函數(shù)調(diào)用,被調(diào)用的頁(yè)面能夠訪問(wèn)發(fā)出調(diào)用頁(yè)面的表單數(shù)據(jù)和查詢字符串集合,所以要把被調(diào)用頁(yè)面Page指令的EnableViewStateMac 屬性設(shè)置成 False。4.erver.Execute("another.aspx")和 Server.Transfer("another.aspx")區(qū)另1J:Execute是從當(dāng)前頁(yè)面轉(zhuǎn)移到指定頁(yè)面,并將執(zhí)行返回到當(dāng)前頁(yè)面Transfer是將執(zhí)行完全轉(zhuǎn)移到指定頁(yè)面總結(jié):在網(wǎng)絡(luò)狀態(tài)較玄?的情況下,Redirect(url)方法效率
7、最高!可重定向到同一臺(tái)或非同一臺(tái)服務(wù)器上的aspx或非aspx (html)資源Server.Transfer方法和 Server.Execute方法最靈活!但只能轉(zhuǎn)到同一 Application目錄下, 也有可能導(dǎo)致不期望的結(jié)果發(fā)生Server.Execute方法占用資源最多.2、SQL 2005的新特性是什么? 與oracle有什么區(qū)別?一、數(shù)據(jù)庫(kù)設(shè)計(jì)方面1、字段類型。varchar(max)nvarchar(max)類型的引入大大的提高了編程的效率,可以使用字符串 函數(shù)對(duì)CLOB類型進(jìn)行操作,這是一個(gè)亮點(diǎn)。但是這就引發(fā)了對(duì)varchar和char效率討論的老問(wèn)題。到底如何分配 varch
8、ar的數(shù)據(jù),是否會(huì)出現(xiàn)大規(guī)模的碎片?是否碎片會(huì)引 發(fā)效率問(wèn)題?這都是需要進(jìn)一步探討的東西。varbinary(max)代替image也讓SQL Server的字段類型更加簡(jiǎn)潔統(tǒng)一。XML字段類型更好的解決了XML數(shù)據(jù)的操作。XQuery確實(shí)不錯(cuò),但是個(gè)人對(duì)其沒(méi)好感。(CSDN的開(kāi)發(fā)者應(yīng)該是相當(dāng)?shù)氖炝耍?2、外鍵的級(jí)聯(lián)更能擴(kuò)展可能大部分的同行在設(shè)計(jì)OLTP系統(tǒng)的時(shí)候都不愿意建立外鍵,都是通過(guò)程序來(lái)控制父子數(shù)據(jù)的完整性。但是再開(kāi)發(fā)調(diào)試階段和OLAP環(huán)境中,外鍵是可以建立的。新版本中加入了 SET NULL和SET DEFAULT1性,能夠提供能好的級(jí)聯(lián)設(shè)置。3、索引附加字段這是一個(gè)不錯(cuò)的新特性。雖
9、然索引的附加字段沒(méi)有索引鍵值效率高,但是相對(duì)映射 到數(shù)據(jù)表中效率還是提高了很多。我做過(guò)試驗(yàn),在我的實(shí)驗(yàn)環(huán)境中會(huì)比映射到表中提高 30%左右的效率。4、計(jì)算字段的持久化原來(lái)的計(jì)算字段其實(shí)和虛擬字段很像。只是管理方面好了而已,性能方面提高不多。但是SQL2005提供了計(jì)算字段的持久化,這就提高了查詢的性能,但是會(huì)加重insert和update的負(fù)擔(dān)。OLTP慎用。OLAP可以大規(guī)模使用。5、分區(qū)表分區(qū)表是個(gè)亮點(diǎn)!從分區(qū)表也能看出微軟要做大作強(qiáng)SQL Server的信心。資料很多,這里不詳細(xì)說(shuō)。但是重點(diǎn)了解的是: 現(xiàn)在的SQL Server2005的表,都是默認(rèn)為分區(qū)表的。 因?yàn)樗С只瑒?dòng)窗口的這
10、個(gè)特性。這種特性對(duì)歷史數(shù)據(jù)和實(shí)時(shí)數(shù)據(jù)的處理是很有幫助的。但是需要注意的一點(diǎn),也是我使用過(guò)程中發(fā)現(xiàn)的一個(gè)問(wèn)題。在建立 function->schema->table后,如果在現(xiàn)有的分區(qū)表上建立沒(méi)有顯式聲明的聚集索引時(shí), 分區(qū)表會(huì)自動(dòng)變?yōu)榉欠謪^(qū)表。這一點(diǎn)很讓我納悶。如果你覺(jué)得我的非分區(qū)索引無(wú)法對(duì)起 子分區(qū),你可以提醒我一下呀!沒(méi)有任何的提醒,直接就變成了非分區(qū)表。不知道這算不算 一個(gè)bug。大家也可以試試。分區(qū)表效率問(wèn)題肯定是大家關(guān)心的問(wèn)題。在我的試驗(yàn)中,如果按照分區(qū)字段進(jìn)行的 查詢(過(guò)濾)效率會(huì)高于未分區(qū)表的相同語(yǔ)句。但是如果按照非分區(qū)字段進(jìn)行查詢,效 率會(huì)低于未分區(qū)表的相同語(yǔ)句。但
11、是隨著數(shù)據(jù)量的增大,這種成本差距會(huì)逐漸減小,趨 于相等。(500萬(wàn)數(shù)量級(jí)只相差10%左右)6、CLR類型微軟對(duì)CLR作了大篇幅的宣傳,這是因?yàn)閿?shù)據(jù)庫(kù)產(chǎn)品終于融入.net體系中。最開(kāi)始我們也是狂喜,感覺(jué)對(duì)象數(shù)據(jù)庫(kù)的一些概念可以實(shí)現(xiàn)了。但是作了些試驗(yàn),發(fā)現(xiàn)使用CLR的存儲(chǔ)過(guò)程或函數(shù)在達(dá)到一定的閥值的時(shí)候,系統(tǒng)性能會(huì)呈指數(shù)級(jí)下滑!這是非常危險(xiǎn) 的!只使用幾個(gè)可能沒(méi)有問(wèn)題,當(dāng)一旦大規(guī)模使用會(huì)造成嚴(yán)重的系統(tǒng)性能問(wèn)題!其實(shí)可以做一下類比,Oracle等數(shù)據(jù)庫(kù)產(chǎn)品老早就支持了 java編程,而且提供了 java 池參數(shù)作為用戶配置接口。但是現(xiàn)在有哪些系統(tǒng)大批使用了java存儲(chǔ)過(guò)程? !連 Oracle自己的
12、應(yīng)用都不用為什么?!還不是性能有問(wèn)題!否則面向?qū)ο蟮臄?shù)據(jù)庫(kù)早就實(shí)現(xiàn)了!建議使用CLR的地方一般是和應(yīng)用的復(fù)雜程度或操作系統(tǒng)環(huán)境有很高的耦合度的場(chǎng)景。如你想構(gòu)建復(fù)雜的算法,并且用到了大量的指針和高級(jí)數(shù)據(jù)模型?;蛘呤且筒僮?系統(tǒng)進(jìn)行Socket通訊的場(chǎng)景。否則建議慎重!7、索引視圖索引視圖2k就有。但是2005對(duì)其效率作了一些改進(jìn)但是schema.viewname的作用域真是太限制了它的應(yīng)用面。還有一大堆的環(huán)境參數(shù)和種種限制都讓人對(duì)它有點(diǎn)卻步。8、語(yǔ)句和事務(wù)快照語(yǔ)句級(jí)快照和事務(wù)級(jí)快照終于為SQL Server的并發(fā)性能帶來(lái)了突破。個(gè)人感覺(jué)語(yǔ)句級(jí)快照大家應(yīng)該應(yīng)用。事務(wù)級(jí)快照,如果是高并發(fā)系統(tǒng)還要慎
13、用。如果一個(gè)用戶總是被 提示修改不成功要求重試時(shí),會(huì)殺人的!9、數(shù)據(jù)庫(kù)快照原理很簡(jiǎn)單,對(duì)要求長(zhǎng)時(shí)間計(jì)算某一時(shí)間點(diǎn)的報(bào)表生成和防用戶操作錯(cuò)誤很有幫助。但是比起 Oracle10g的閃回技術(shù)還是細(xì)粒度不夠??上В《?、開(kāi)發(fā)方面1、Ranking函數(shù)集其中最有名的應(yīng)該是 row_number 了。這個(gè)終于解決了用臨時(shí)表生成序列號(hào)的歷史, 而且SQL Server2005的row_number比Oracle的更先進(jìn)。因?yàn)樗?Order by集成到了一 起,不用像Oracle那樣還要用子查詢進(jìn)行封裝。但是大家注意一點(diǎn)。如下面的例子:select ROW_NUMBER() OVER (order by a
14、a)from tblorder by bb會(huì)先執(zhí)行aa的排序,然后再進(jìn)行 bb的排序??赡苡械呐笥褧?huì)抱怨集成的order by ,其實(shí)如果使用ranking函數(shù),Order by是少不了的。如果擔(dān)心 Order by會(huì)影響效率,可以為 order by的字段建立聚集索引,查詢計(jì)劃會(huì) 忽略order by操作(因?yàn)楸緛?lái)就是排序的嘛)。2、top可以動(dòng)態(tài)傳入?yún)?shù),省卻了動(dòng)態(tài)SQL的拼寫。3、Apply對(duì)遞歸類的樹(shù)遍歷很有幫助。4、CTE個(gè)人感覺(jué)這個(gè)真是太棒了!閱讀清晰,非常有時(shí)代感。5 try/catch代替了原來(lái) VB式的錯(cuò)誤判斷。比 Oracle高級(jí)不少。6、pivot/unpivot個(gè)人感覺(jué)
15、沒(méi)有case直觀。而且默認(rèn)的第三字段(還可能更多)作為 group by字段 很容易造成新手的錯(cuò)誤。三、DBA管理方面1、數(shù)據(jù)庫(kù)級(jí)觸發(fā)器記得在最開(kāi)始使用 2k的時(shí)候就要用到這個(gè)功能,可惜 2k沒(méi)有,現(xiàn)在有了作解決方 案的朋友會(huì)很高興吧。2、多加的系統(tǒng)視圖和實(shí)時(shí)系統(tǒng)信息這些東西對(duì)DBA挑優(yōu)非常有幫助,但是感覺(jué)粒度還是不太細(xì)。3、優(yōu)化器的改進(jìn)一直以來(lái)個(gè)人感覺(jué) SQL Server的優(yōu)化器要比 Oracle的聰明。SQL2005的更是比2k 聰明了不少。(有次作試驗(yàn)發(fā)現(xiàn)有的語(yǔ)句在200萬(wàn)級(jí)時(shí)還比 50萬(wàn)級(jí)的相同語(yǔ)句要快show_text的一些提示沒(méi)有找到解釋。一直在奇怪。 )4、profiler的新
16、事件觀察這一點(diǎn)很好的加強(qiáng)了profiler的功能。但是提到profiler提醒大家注意一點(diǎn)。windows2003要安裝sp1補(bǔ)丁才能啟動(dòng)profiler o否則點(diǎn)擊沒(méi)有反應(yīng)。5、sqlcmd習(xí)慣敲命令行的朋友可能會(huì)爽一些。但是功能有限。適合機(jī)器跑不動(dòng)SQL ServerManagement Studio 的朋友使用。3、ASP.NET MVC 介紹MVC把一個(gè) web應(yīng)用分成了三個(gè)部分:model view和controller 。 ASP.NET MVC框架提供了一個(gè)可以代替 web窗體的基于 mvc的應(yīng)用。ASP.NET MVC概述mvc的優(yōu)點(diǎn):1 .通過(guò)把項(xiàng)目分成model view和
17、controller ,使得復(fù)雜項(xiàng)目更加容易維護(hù)。2 .沒(méi)有使用view state和服務(wù)器表單控件,可以更方便的控制應(yīng)用程序的行為3 .應(yīng)用程序通過(guò) controller來(lái)控制程序請(qǐng)求,可以提供豐富的url重寫。4 .對(duì)單元測(cè)試的支持更加出色5 .在團(tuán)隊(duì)開(kāi)發(fā)模式下表現(xiàn)更出眾ASP.NET MVC 概述 web窗體的優(yōu)點(diǎn):1 .采用事件驅(qū)動(dòng)模式來(lái)控制應(yīng)用程序請(qǐng)求,由大量服務(wù)器控件支持2 .采用頁(yè)面控制機(jī)制,可以為單個(gè)頁(yè)面添加事件處理函數(shù)。3 .使用view state和服務(wù)器端頁(yè)面,使管理頁(yè)面狀態(tài)信息更加輕松。4 .對(duì)人數(shù)較少的想使用服務(wù)器端控件的開(kāi)發(fā)團(tuán)隊(duì),使用起來(lái)更加方便5 .開(kāi)發(fā)起來(lái)比 m
18、vc模式要輕松簡(jiǎn)單一些ASP.NET MVC 概述 mvc框架特色:1 .分離任務(wù)(輸入邏輯,業(yè)務(wù)邏輯和顯示邏輯),易測(cè)性和默認(rèn)的測(cè)試驅(qū)動(dòng)組件。所有mvc用到的組件都是基于接口并且可以被mock對(duì)象測(cè)試到,你可以不必在進(jìn)程中運(yùn)行 controller就可以使用測(cè)試。使得測(cè)試更加快速和簡(jiǎn)捷。2 .可擴(kuò)展的簡(jiǎn)便的框架。mvc框架被設(shè)計(jì)用來(lái)更輕松的移植和定制功能。你可以加入自己的視圖引擎,url 重寫策略。重載 action 方法等。mvc 也支持 Dependency Injection (DI) and Inversion of Control (IOC )3 .強(qiáng)大的url重寫機(jī)制讓你更方便的
19、建立容易理解和可搜索的url。url可以不包含任何文件擴(kuò)展名,并且可以重寫url使其對(duì)搜索引擎更加友好。4 .可以使用現(xiàn)有的頁(yè)面標(biāo)記、用戶控件、模板頁(yè)。你可以使用嵌套模板頁(yè),嵌入表達(dá)式 <%=%>,聲明服務(wù)器控件、模板,數(shù)據(jù)綁定、定位等等。5 .對(duì)現(xiàn)有的程序的支持,mvc讓你可以使用如窗體認(rèn)證和windows認(rèn)證、url認(rèn)證、組管理和規(guī)則、 輸出、數(shù)據(jù)緩存、session、profile 、health monitoring 、配置管理系統(tǒng)、provider architecture 特性。4、SQL Server三種復(fù)制的區(qū)別1、事務(wù)復(fù)制將復(fù)制啟用后的所有發(fā)布服務(wù)器上發(fā)布的內(nèi)容在
20、修改時(shí)傳給訂閱服務(wù)器; 數(shù)據(jù)更改將按照其在發(fā)布服務(wù)器上發(fā)生的順序和事務(wù)邊界,應(yīng)用于訂閱服務(wù)器; 在發(fā)布內(nèi)部可以保證事務(wù)的一致性;2、快照復(fù)制將數(shù)據(jù)以特定時(shí)刻的瞬時(shí)狀態(tài)分發(fā),而不監(jiān)視對(duì)數(shù)據(jù)的更新; 發(fā)生同步時(shí),將生成完整的快照,并將其發(fā)送到訂閱服務(wù)器;3、合并復(fù)制通常從發(fā)布數(shù)據(jù)庫(kù)對(duì)象和數(shù)據(jù)的快照開(kāi)始,并且用觸發(fā)器跟蹤在發(fā)布器和訂閱服務(wù)器上所做的后續(xù)更改和架構(gòu)修改;訂閱服務(wù)器在連接到網(wǎng)絡(luò)時(shí)將與發(fā)布服務(wù)器進(jìn)行同步,并交換自上次同步以來(lái)發(fā) 布服務(wù)器和訂閱服務(wù)器之間發(fā)生更改的所有行;5、請(qǐng)你談一談你對(duì)值類型與引用類型的理解?1 .所有對(duì)象都繼承自 System.Object,而所有的值類型都繼承自Sys
21、tem.ValueTypa也就是說(shuō),System.ValueType重寫了 System.Object的方法使得值類型的操作是基于值而 不是基于引用。2 .值類型內(nèi)存分配在棧上,引用類型內(nèi)存分配在托管堆中。內(nèi)存分配在這兩個(gè)地方的區(qū)別在于:如果超出了值類型定義的范圍,值類型分配的內(nèi)存會(huì)立刻從內(nèi)存中清除, 即它的內(nèi)存生命周期是可以預(yù)測(cè)的。而引用類型分配在托管堆中,內(nèi)存管理有垃圾處理 器控制,不可預(yù)知其生命周期。3 .賦值操作值類型賦值操彳是會(huì)依次copy所有成員變量的值。引用類型僅僅是地址重定向。4 .參數(shù)傳遞默認(rèn)為值傳遞,即參數(shù)為值類型是傳遞值類型的值副本,參數(shù)為引用類型時(shí)傳遞引用類型地址值副本
22、。但當(dāng)參數(shù)使用out或者ref關(guān)鍵字是,傳遞的是引用本身。但是在使用ref,需要注意一些區(qū)別:當(dāng)參數(shù)為引用類型時(shí),不使用 ref關(guān)鍵字,方法還是可以通過(guò)傳入的引用改變其所 指向的實(shí)例,但是不能改變引用本身。當(dāng)參數(shù)為引用類型時(shí),同時(shí)使用 ref關(guān)鍵字,方法可以通過(guò)傳入的引用改變其所指向的實(shí)例,并且改變引用本身。5.值類型是sealed的,不能繼承6 .值類型不能寫Finalize()方法,該方法用于堆上的內(nèi)存回收。7 .裝箱與拆箱裝有i -把值類型轉(zhuǎn)換為引用類型。拆有i -把引用類型轉(zhuǎn)換為值類型。作用:可以把值類型也看作是對(duì)象。最常使用的情況是在集合操作的時(shí)候,大多數(shù) 方法接口都接收一個(gè)對(duì)象參數(shù)
23、(object)。當(dāng)傳入值類型時(shí),.NET會(huì)自動(dòng)處理裝箱細(xì)節(jié), 把值類型轉(zhuǎn)變?yōu)橐妙愋?。從集合取出時(shí),把引用類型的值取出放回值類型變量。缺點(diǎn):性能上有損失。并且缺少類型安全保證。.NET 2.0推出了泛型 基本上能解決這個(gè)問(wèn)題。6、 private > protected > public 和 internal 的區(qū)另U ?private是完全私有的,只有在類自己里面可以調(diào)用,在類的外部和子類都不能調(diào)用,子類也不能繼承父類的 private的屬性和方法。protected雖然可以被外界看到,但外界卻不能調(diào)用,只有自己及自己的子類可以調(diào)用(protected的屬性和方法都可以被子類所
24、繼承和調(diào)用)。private和protected的共同點(diǎn):外部都不可以訪問(wèn)。private和protected的不同點(diǎn):在同一類中可視為一樣,但在繼承中就不同了, private在派生類中不可以被訪問(wèn),而 protected可以。public對(duì)任何類和成員都完全公開(kāi),無(wú)限制訪問(wèn)。internal同一應(yīng)用程序集內(nèi)部(在VS.NET中的一個(gè)項(xiàng)目中,這里的項(xiàng)目是指單獨(dú)的項(xiàng)目,而不是整個(gè)解決方案)可以訪問(wèn)。public和internal的區(qū)別:public的成員可以跨程序集,但 internal不能,同一程序 集中具有相同的效果。protected internal :只能在同一應(yīng)用程序集內(nèi)本類、派生
25、類訪問(wèn)。7、ASPNET如何進(jìn)行性能優(yōu)化問(wèn)題?我們將從5方面來(lái)進(jìn)行ASPNET性能優(yōu)化:一、SqlDataRead 和 Dataset 的選擇Sqldataread優(yōu)點(diǎn):讀取數(shù)據(jù)非???。如果對(duì)返回的數(shù)據(jù)不需做大量處理的情況 下,建議使用SqlDataReader,其性能要比datset好很多。缺點(diǎn):直到數(shù)據(jù)讀完才可 close 掉于數(shù)據(jù)庫(kù)的連接(SqlDataReader讀數(shù)據(jù)是快速向前的。SqlDataReader類提供了一種讀取從SQLServer數(shù)據(jù)庫(kù)檢索的只進(jìn)數(shù)據(jù)流的方法。它使用 SQL Server的本機(jī)網(wǎng)絡(luò)數(shù)據(jù)傳輸格式 從數(shù)據(jù)庫(kù)連接直接讀取數(shù)據(jù)。DataReader需及時(shí)顯式的cl
26、ose。可及時(shí)的釋放對(duì)數(shù)據(jù)的連 接。)Dataset是把數(shù)據(jù)讀出,緩存在內(nèi)存中。缺點(diǎn):對(duì)內(nèi)存的占用較高。如果對(duì)返 回的數(shù)據(jù)需做大量的處理用Dataset比較好些可以減少對(duì)數(shù)據(jù)庫(kù)的連接操作。優(yōu)點(diǎn):只需連接一次就可close于數(shù)據(jù)庫(kù)的連接一般情況下,讀取大量數(shù)據(jù),對(duì)返回?cái)?shù)據(jù)不做大量處理用SqlDataReader對(duì)返回?cái)?shù)據(jù)大量處理用 datset比較合適.對(duì)SqlDataReader和Dataset的選擇取決于程序功能的實(shí) 現(xiàn)。二、ExecuteNonQuery 和 ExecuteScalar對(duì)數(shù)據(jù)的更新不需要返回結(jié)果集,建議使用ExecuteNonQuery。由于不返回結(jié)果集可省掉網(wǎng)絡(luò)數(shù)據(jù)傳輸。
27、它僅僅返回受影響的行數(shù)。如果只需更新數(shù)據(jù)用 ExecuteNonQuery性能的開(kāi)銷比較小。ExecuteScalar它只返回結(jié)果集中第一行的第一列。使用 ExecuteScalar方法從 數(shù)據(jù)庫(kù)中檢索單個(gè)值 (例如id號(hào))。與使用ExecuteReader方法,返回的數(shù)據(jù)執(zhí)行生成 單個(gè)值所需的操作相比,此操作需要的代碼較少。只需更新數(shù)據(jù)用 ExecuteNonQuery.單個(gè)值的查詢使用 ExecuteScalar數(shù)據(jù)綁定的 選擇三、數(shù)據(jù)的綁定 DataBinder一般的綁定方法 <%# DataBinder.Eval(Container.DataItem,"字段名"
28、;)>用 DataBinder.eval綁定不必關(guān)心數(shù)據(jù)來(lái)源 (Dataread或dataset)。不必關(guān)心數(shù)據(jù)的類型eval會(huì)把這個(gè)數(shù)據(jù)對(duì)象轉(zhuǎn)換為一個(gè)字符串。在底層綁定做了很多工作,使用了反射性能。正 因?yàn)槭褂梅奖懔耍?但卻影響了數(shù)據(jù)性能。來(lái)看下<%# DataBinder.Eval(Container.DataItem,"字段名")%>。當(dāng)于dataset綁定時(shí),Dataltem其實(shí)式一個(gè) DataRowView (如果綁定的是 一個(gè)數(shù)據(jù)讀取器(dataread )它就是一個(gè) IdataRecord。)因此直接轉(zhuǎn)換成DataRowView的話,將會(huì)給性
29、能帶來(lái)很大提升。<%# ctype(Container.DataItem,DataRowView).Row("字段名")%>對(duì)數(shù)據(jù)的綁定建議使用<%# ctype(Container.DataItem,DataRowView).Row("字段名")%>。數(shù)據(jù)量大的時(shí)候可提高幾百倍的速度。使用時(shí)注意2方面:1.需在頁(yè)面添加<%Import namespace="System.Data"%>.2.注意字段名的大小寫(要特別注意) 。如果和查詢 的不一致,在某些情況下會(huì)導(dǎo)致比<%# DataBind
30、er.Eval(Container.DataItem,"字段名")%>還要慢。如果想進(jìn)一步提高速度,可采用 <%# ctype(Container.DataItem,DataRowView).Row(0) %> 的方法。不過(guò)其可讀性不高。以上的是 的寫法。在 c#中:<% (DataRowView)Container.DataItem)" 字段名"%>對(duì)查看頁(yè)面每個(gè)執(zhí)行過(guò)程狀態(tài)最簡(jiǎn)單的辦法:其頁(yè)面的trace屬性為true就可查看細(xì)節(jié)。一、使用存儲(chǔ)過(guò)程:1、性能方面:存儲(chǔ)過(guò)程提供了許多標(biāo)準(zhǔn)sql語(yǔ)言中所沒(méi)有的高級(jí)特性。其傳遞
31、參數(shù)和執(zhí)行邏輯表達(dá)式的功能,有助于應(yīng)用程序設(shè)計(jì)者處理復(fù)雜任務(wù)。另外,存儲(chǔ)過(guò)程 存儲(chǔ)在本地服務(wù)器上,減少了執(zhí)行該過(guò)程所需的網(wǎng)絡(luò)傳輸寬帶和執(zhí)行時(shí)間。(存儲(chǔ)過(guò)程已經(jīng)對(duì)sql語(yǔ)句進(jìn)行了預(yù)編譯,所以其執(zhí)行速度比在程序里執(zhí)行sql語(yǔ)句快很多)2、程序結(jié)構(gòu)方面:從程序的可擴(kuò)展性看,使用存儲(chǔ)過(guò)程會(huì)對(duì)程序以后的修改 帶來(lái)方便。比如數(shù)據(jù)庫(kù)的結(jié)構(gòu)改變了,只需修改相對(duì)應(yīng)的存儲(chǔ)結(jié)構(gòu),和程序中的調(diào)用部 分即可。這部分不屬于本文探討范圍,屬于程序結(jié)構(gòu)設(shè)計(jì)方面。所以不在此展開(kāi)。3、程序安全性:使用存儲(chǔ)過(guò)程可避免SQL Injection攻擊。二、查詢語(yǔ)句的優(yōu)化(針對(duì) sql server2000 )很多人只為目的寫出 sql
32、語(yǔ)句,而不考慮sql語(yǔ)句的執(zhí)行效率。在這我只提供一 優(yōu)化表順序的方法,(sql語(yǔ)句的優(yōu)化和原則將會(huì)在我的 sql server2000學(xué)習(xí)筆記中專題討 論)對(duì)sql語(yǔ)句執(zhí)行效率可用 sql server2000的查詢分析器來(lái)查看語(yǔ)句的執(zhí)行過(guò)程。優(yōu)化表順序:一般情況下,sqlserver會(huì)對(duì)表的連接作出自動(dòng)優(yōu)化。例如:selectname,no from A join B on A. id=B.id join C on C.id=A.id where name= ' wang'盡管A表在From中先列出,然后才是 B,最后才是C。但sql server可能會(huì)首先 使用c表。它的選
33、擇原則是相對(duì)于該查詢限制為單行或少數(shù)幾行,就可以減少在其他表 中查找的總數(shù)據(jù)量。絕大多數(shù)情況下,sql server會(huì)作出最優(yōu)的選擇,但如果你發(fā)覺(jué)某個(gè)復(fù)雜的聯(lián)結(jié)查詢速度比預(yù)計(jì)的要慢,就可以使用SET FORCEPLAM句弓II制sql server按照表出現(xiàn)順序使用表。如上例加上:SET FORCEPLAN ON.SET FORCEPLAN OFF的執(zhí)行順序?qū)?huì)按照你所寫的順序執(zhí)行。在查詢分析器中查看2種執(zhí)行效率,從而選擇表的連接順序。使用SET FORCEPLA睡擇表聯(lián)結(jié)順序三、頁(yè)面的優(yōu)化(.aspx)主要針對(duì)幾個(gè)頁(yè)面屬性1、EnableViewState(頁(yè)面的視圖狀態(tài) )。如果無(wú)特殊要求
34、設(shè)置為false。使用ViewState ,每個(gè)對(duì)象都必須先序列化到ViewState中,然后再通過(guò)回傳進(jìn)行反序列化,因此使用 ViewState是沒(méi)有代價(jià)的。盡量減少使用對(duì)象,如果可能,盡量減少放入 ViewState中的對(duì)象的數(shù)目。下面情況基本上可以禁用viewstate:(1)頁(yè)面控件(.ascx)(2)頁(yè)面不回傳給自身。(3)無(wú)需對(duì)控件的事件處理。(4)控件沒(méi)有動(dòng)態(tài)的或數(shù)據(jù)綁定的屬性值(或?qū)τ诿總€(gè)postpack都在代碼中處理)單個(gè)頁(yè)面或每個(gè)頁(yè)面都禁用ViewState ,如下所示:?jiǎn)蝹€(gè)頁(yè)面:<% PageEnableViewState="False" %> 每個(gè)頁(yè)面:在 web.config 中 <Pages EnableViewState="false" /> EnableSessionState保持默認(rèn)值即可(如果頁(yè)面用到sessionstate它才會(huì)占用資源)。EnableViewStateMac如果無(wú)安全上的特殊要求,保持默認(rèn)值。2、Pagelayout.頁(yè)面布局模型。建議使用 Flowlayout(元素不帶絕對(duì)定位屬性添 加).Gridlayout(絕對(duì)定位屬性)由于采用絕對(duì)定位,將會(huì)比 Flowlayout生產(chǎn)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 菲迪克合同條件2025年度解讀:合同履行監(jiān)督與違約責(zé)任認(rèn)定
- 籃球館休息區(qū)裝修協(xié)議
- 企業(yè)并購(gòu)居間合同承諾書
- 環(huán)保材料運(yùn)輸服務(wù)協(xié)議
- 農(nóng)村購(gòu)買樓房合同范例
- 買賣合同買賣合同范例
- 中介擔(dān)保合同范例
- 住房自裝裝修合同范例
- 乙方商務(wù)用車合同范例
- 專用閥門采購(gòu)合同范例
- 13詩(shī)第十二-整本書閱讀系列《經(jīng)典常談》名著閱讀與練習(xí)
- 小學(xué)美術(shù)-湘美版四年級(jí)下冊(cè)第10課中國(guó)龍教學(xué)設(shè)計(jì)學(xué)情分析教材分析課后反思
- 一年級(jí)下冊(cè)勞技教案
- 部編版四年級(jí)語(yǔ)文下冊(cè)第4單元大單元整體教學(xué)作業(yè)設(shè)計(jì)(教案配套)
- 大一邏輯學(xué)全部
- 游戲法緩解小班幼兒入園焦慮的個(gè)案研究
- 2023年包頭輕工職業(yè)技術(shù)學(xué)院?jiǎn)握芯C合素質(zhì)題庫(kù)及答案解析
- 地下室頂板裂縫防水處理方案(完整資料)
- 宮頸錐切日間手術(shù)臨床路徑(婦科)及表單
- GB/T 23111-2008非自動(dòng)衡器
- GB/T 18877-2020有機(jī)無(wú)機(jī)復(fù)混肥料
評(píng)論
0/150
提交評(píng)論