.net模擬面試常見問題及答案_第1頁
.net模擬面試常見問題及答案_第2頁
.net模擬面試常見問題及答案_第3頁
.net模擬面試常見問題及答案_第4頁
.net模擬面試常見問題及答案_第5頁
已閱讀5頁,還剩5頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

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)求。 這就是說,使用 Response.Redirect 方法時(shí)重定向操作發(fā)生在客戶端,總共涉及到兩 次與服務(wù)器的通信(兩個(gè)來回) :第一次是對(duì)原始頁面

2、的請(qǐng)求,得到一個(gè)302 應(yīng)答,第二次是請(qǐng)求302 應(yīng)答中聲明的新頁面,得到重定向之后的頁面。2、 Server.TransferServer.transfer 是 IIS 5.0 新增加的一個(gè)功能。它解決了 Response.Redirect 的兩個(gè)重要 的缺陷:1)在 Response.Redirect 中,我們得不到任何第一頁的輸出2) Response.Redirect會(huì)丟失request中的所有屬性,當(dāng)然我們可以通過一些其他的辦法,比如 session 來搞定,可是,有些頁的參數(shù)是在request 中傳過來的,這樣的話,就不行了;3) Response.Redirect 需要 clie

3、nt 端再發(fā)起一個(gè)請(qǐng)求。server.transfer就很好地解決了這些問題。它是從server端直接向下一頁發(fā)起請(qǐng)求,不需要client 再次發(fā)送請(qǐng)求.如果你的網(wǎng)頁非常依賴 response.redirect, 這個(gè)小小的改變可以提高將近25%的效率。 (根據(jù)微軟文檔) .Server.Transfer方法把執(zhí)行流程從當(dāng)前的ASPX文件轉(zhuǎn)到同一服務(wù)器上的另一個(gè)ASPX頁面。調(diào)用 Server.Transfer時(shí),當(dāng)前的 ASPX頁面終止執(zhí)行,執(zhí)行流程轉(zhuǎn)入另一個(gè)ASPX頁面,但新的 ASPX頁面仍使用前一 ASPX頁面創(chuàng)建的應(yīng)答流。如果用Server.Transfer方法實(shí)現(xiàn)頁面之間的導(dǎo)航,瀏

4、覽器中的URL不會(huì)改變,因?yàn)橹囟ㄏ蛲耆诜?wù)器端進(jìn)行,瀏覽器根本不知道服務(wù)器已經(jīng)執(zhí)行了一次頁面變換。默認(rèn)情況下,Server.Transfer方法不會(huì)把表單數(shù)據(jù)或查詢字符串從一個(gè)頁面?zhèn)鬟f到另一個(gè)頁面,但只要把該方法的第二個(gè)參數(shù)設(shè)置成True,就可以保留第一個(gè)頁面的表單數(shù)據(jù)和查詢字符串。同時(shí),使用Server.Transfer時(shí)應(yīng)注意一點(diǎn):目標(biāo)頁面將使用原始頁面創(chuàng)建的應(yīng) 答流,這導(dǎo)致 ASPNET的機(jī)器驗(yàn)證檢查(MachineAuthentication Check, MAC)認(rèn)為新頁面的 ViewState已被篡改。因此,如果要 保留原始頁面的表單數(shù)據(jù)和查詢字符串集合,必須把目標(biāo)頁面Page指

5、令的 EnableViewStateMac 屬性設(shè)置成 Falseserver.Transfer(泊一個(gè)不足就是:當(dāng)用戶在 a.aspx中提交了一個(gè)表單,然后用Server.Transfer(進(jìn)入b.aspx,這時(shí)如果用戶刷新一下頁面,瀏覽器便會(huì)問用戶是否“重試”發(fā)送表單,如果用戶點(diǎn)擊“是” ,那么,表單中的數(shù)據(jù)被重新發(fā)送到服務(wù)器。如發(fā)送表單的作用就是為了向數(shù)據(jù)庫中插入一條記錄,結(jié)果導(dǎo)不希望發(fā)生的事同一表單被多次加入到數(shù)據(jù)庫中。3、 Server.ExecuteServer.Execute方法允許當(dāng)前的 ASPXM面執(zhí)行一個(gè)同一 Web服務(wù)器上的指定 ASPX 頁面,當(dāng)指定的 ASPX頁面執(zhí)行

6、完畢,控制流程重新返回原頁面發(fā)出Server.Execute調(diào)用的位置。這種頁面導(dǎo)航方式類似于針對(duì)ASPX頁面的一次函數(shù)調(diào)用,被調(diào)用的頁面能夠訪問發(fā)出調(diào)用頁面的表單數(shù)據(jù)和查詢字符串集合,所以要把被調(diào)用頁面Page 指令的EnableViewStateMac 屬性設(shè)置成False。4.erver.Execute("another.aspx") 和 Server.Transfer("another.aspx") 區(qū)別 : Execute 是從當(dāng)前頁面轉(zhuǎn)移到指定頁面,并將執(zhí)行返回到當(dāng)前頁面Transfer是將執(zhí)行完全轉(zhuǎn)移到指定頁面總結(jié):在網(wǎng)絡(luò)狀態(tài)較玄?的情況下

7、,Redirect(url)方法效率最高!可重定向到同一臺(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ù)庫設(shè)計(jì)方面1、字段類型。varchar(max)nvarchar(max) 類型的引入大大的提高了編程的效率,可以使用字符串函數(shù)對(duì)CLOB類型進(jìn)行操作,這是一個(gè)亮點(diǎn)。但是這就引發(fā)了對(duì)varchar和

8、char效率討論的老問題。到底如何分配varchar 的數(shù)據(jù),是否會(huì)出現(xiàn)大規(guī)模的碎片?是否碎片會(huì)引發(fā)效率問題?這都是需要進(jìn)一步探討的東西。varbinary(max)代替image也讓SQL Server的字段類型更加簡潔統(tǒng)一。XML 字段類型更好的解決了 XML 數(shù)據(jù)的操作。 XQuery 確實(shí)不錯(cuò),但是個(gè)人對(duì)其沒好感。(CSDN的開發(fā)者應(yīng)該是相當(dāng)?shù)氖炝耍?2、外鍵的級(jí)聯(lián)更能擴(kuò)展可能大部分的同行在設(shè)計(jì)OLTP系統(tǒng)的時(shí)候都不愿意建立外鍵,都是通過程序來控制父子數(shù)據(jù)的完整性。但是再開發(fā)調(diào)試階段和OLAP環(huán)境中,外鍵是可以建立的。新版本中加入了 SET NULL和SET DEFAULT1性,能夠提

9、供能好的級(jí)聯(lián)設(shè)置。3、索引附加字段這是一個(gè)不錯(cuò)的新特性。雖然索引的附加字段沒有索引鍵值效率高,但是相對(duì)映射到數(shù)據(jù)表中效率還是提高了很多。我做過試驗(yàn),在我的實(shí)驗(yàn)環(huán)境中會(huì)比映射到表中提高30%左右的效率。4、計(jì)算字段的持久化原來的計(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ì)說。 但是重點(diǎn)了解的是: 現(xiàn)在的 SQL Serve

10、r2005 的表, 都是默認(rèn)為分區(qū)表的。因?yàn)樗С只瑒?dòng)窗口的這個(gè)特性。 這種特性對(duì)歷史數(shù)據(jù)和實(shí)時(shí)數(shù)據(jù)的處理是很有幫助 的。但是需要注意的一點(diǎn),也是我使用過程中發(fā)現(xiàn)的一個(gè)問題。在建立 function->schema->table 后,如果在現(xiàn)有的分區(qū)表上建立沒有顯式聲明的聚集索引時(shí), 分區(qū)表會(huì)自動(dòng)變?yōu)榉欠謪^(qū)表。這一點(diǎn)很讓我納悶。如果你覺得我的非分區(qū)索引無法對(duì)起 子分區(qū),你可以提醒我一下呀!沒有任何的提醒,直接就變成了非分區(qū)表。不知道這算不算一個(gè) bug 。大家也可以試試。分區(qū)表效率問題肯定是大家關(guān)心的問題。在我的試驗(yàn)中,如果按照分區(qū)字段進(jìn)行的查詢(過濾)效率會(huì)高于未分區(qū)表的相同語

11、句。但是如果按照非分區(qū)字段進(jìn)行查詢,效率會(huì)低于未分區(qū)表的相同語句。但是隨著數(shù)據(jù)量的增大,這種成本差距會(huì)逐漸減小,趨于相等。 ( 500 萬數(shù)量級(jí)只相差10%左右)6、CLR類型微軟對(duì)CLR作了大篇幅的宣傳,這是因?yàn)閿?shù)據(jù)庫產(chǎn)品終于融入.net體系中。最開始我們也是狂喜, 感覺對(duì)象數(shù)據(jù)庫的一些概念可以實(shí)現(xiàn)了。 但是作了些試驗(yàn), 發(fā)現(xiàn)使用 CLR 的存儲(chǔ)過程或函數(shù)在達(dá)到一定的閥值的時(shí)候,系統(tǒng)性能會(huì)呈指數(shù)級(jí)下滑!這是非常危險(xiǎn)的!只使用幾個(gè)可能沒有問題,當(dāng)一旦大規(guī)模使用會(huì)造成嚴(yán)重的系統(tǒng)性能問題!其實(shí)可以做一下類比, Oracle 等數(shù)據(jù)庫產(chǎn)品老早就支持了 java 編程, 而且提供了 java池參數(shù)作為

12、用戶配置接口。但是現(xiàn)在有哪些系統(tǒng)大批使用了 java 存儲(chǔ)過程?!連Oracle自己的應(yīng)用都不用為什么?!還不是性能有問題!否則面向?qū)ο蟮臄?shù)據(jù)庫早就實(shí)現(xiàn)了!建議使用CLR的地方一般是和應(yīng)用的復(fù)雜程度或操作系統(tǒng)環(huán)境有很高的耦合度的場(chǎng)景。如你想構(gòu)建復(fù)雜的算法,并且用到了大量的指針和高級(jí)數(shù)據(jù)模型?;蛘呤且筒僮飨到y(tǒng)進(jìn)行 Socket 通訊的場(chǎng)景。否則建議慎重!7、索引視圖索引視圖 2k 就有。但是 2005 對(duì)其效率作了一些改進(jìn)但是schema.viewname 的作用域真是太限制了它的應(yīng)用面。還有一大堆的環(huán)境參數(shù)和種種限制都讓人對(duì)它有點(diǎn)卻步。8、語句和事務(wù)快照語句級(jí)快照和事務(wù)級(jí)快照終于為SQL S

13、erver的并發(fā)性能帶來了突破。個(gè)人感覺語句級(jí)快照大家應(yīng)該應(yīng)用。事務(wù)級(jí)快照,如果是高并發(fā)系統(tǒng)還要慎用。如果一個(gè)用戶總是被 提示修改不成功要求重試時(shí),會(huì)殺人的!9、數(shù)據(jù)庫快照原理很簡單,對(duì)要求長時(shí)間計(jì)算某一時(shí)間點(diǎn)的報(bào)表生成和防用戶操作錯(cuò)誤很有幫助。但是比起Oracle10g 的閃回技術(shù)還是細(xì)粒度不夠??上?!二、開發(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)行封裝。

14、但是大家注意一點(diǎn)。如下面的例子:select ROW_NUMBER() OVER (order by aa)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)楸緛砭褪桥判虻穆铮?。2、 top可以動(dòng)態(tài)傳入?yún)?shù),省卻了動(dòng)態(tài)SQL的拼寫。3、 Apply對(duì)遞歸類的樹遍歷很有幫助。4、 CTE個(gè)人感覺這個(gè)真是太棒了!閱讀清晰,

15、非常有時(shí)代感。5、 try/catch代替了原來VB 式的錯(cuò)誤判斷。比 Oracle 高級(jí)不少。6、 pivot/unpivot個(gè)人感覺沒有case直觀。而且默認(rèn)的第三字段(還可能更多)作為 group by字段 很容易造成新手的錯(cuò)誤。三、DBA 管理方面1、數(shù)據(jù)庫級(jí)觸發(fā)器記得在最開始使用 2k 的時(shí)候就要用到這個(gè)功能,可惜2k 沒有,現(xiàn)在有了作解決方案的朋友會(huì)很高興吧。2、多加的系統(tǒng)視圖和實(shí)時(shí)系統(tǒng)信息這些東西對(duì) DBA 挑優(yōu)非常有幫助,但是感覺粒度還是不太細(xì)。3、優(yōu)化器的改進(jìn)一直以來個(gè)人感覺SQL Server 的優(yōu)化器要比Oracle 的聰明。 SQL2005 的更是比 2k聰明了不少。

16、(有次作試驗(yàn)發(fā)現(xiàn)有的語句在 200 萬級(jí)時(shí)還比50 萬級(jí)的相同語句要快show_text 的一些提示沒有找到解釋。一直在奇怪。 )4、 profiler 的新事件觀察這一點(diǎn)很好的加強(qiáng)了 profiler 的功能。但是提到 profiler 提醒大家注意一點(diǎn)。windows2003 要安裝 sp1 補(bǔ)丁才能啟動(dòng)profiler 。否則點(diǎn)擊沒有反應(yīng)。5、 sqlcmd習(xí)慣敲命令行的朋友可能會(huì)爽一些。但是功能有限。適合機(jī)器跑不動(dòng) SQL Server Management Studio 的朋友使用。3、 ASP.NET MVC 介紹MVC 把一個(gè) web 應(yīng)用分成了三個(gè)部分: model view

17、和 controller 。 ASP.NET MVC 框架提供了一 個(gè)可以代替 web 窗體的基于 mvc 的應(yīng)用。ASP.NET MVC概述mvc的優(yōu)點(diǎn):1. 通過把項(xiàng)目分成model view 和 controller ,使得復(fù)雜項(xiàng)目更加容易維護(hù)。2. 沒有使用 view state 和服務(wù)器表單控件,可以更方便的控制應(yīng)用程序的行為3. 應(yīng)用程序通過controller 來控制程序請(qǐng)求,可以提供豐富的 url 重寫。4. 對(duì)單元測(cè)試的支持更加出色5. 在團(tuán)隊(duì)開發(fā)模式下表現(xiàn)更出眾ASP.NET MVC概述 web窗體的優(yōu)點(diǎn):1. 采用事件驅(qū)動(dòng)模式來控制應(yīng)用程序請(qǐng)求,由大量服務(wù)器控件支持2.

18、采用頁面控制機(jī)制,可以為單個(gè)頁面添加事件處理函數(shù)。3. 使用 view state 和服務(wù)器端頁面,使管理頁面狀態(tài)信息更加輕松。4. 對(duì)人數(shù)較少的想使用服務(wù)器端控件的開發(fā)團(tuán)隊(duì),使用起來更加方便5. 開發(fā)起來比mvc 模式要輕松簡單一些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è)試更加快速和簡捷。2. 可擴(kuò)展的簡便的框架。 mvc 框架被設(shè)計(jì)用來更輕松的移植和定制功能。你可以加入自己的

19、視圖引擎, url 重寫策略。重載 action 方法等。 mvc 也支持 Dependency Injection (DI) and Inversion of Control (IOC )3. 強(qiáng)大的 url 重寫機(jī)制讓你更方便的建立容易理解和可搜索的 url 。 url 可以不包含任何文件擴(kuò)展 名,并且可以重寫url 使其對(duì)搜索引擎更加友好。4. 可以使用 現(xiàn)有的頁面標(biāo)記、用戶控件、模板頁。你可以使用嵌套模板頁,嵌入表達(dá)式 <%=%>, 聲明服務(wù)器控件、模板,數(shù)據(jù)綁定、定位等等。5. 對(duì)現(xiàn)有的 程序的支持, mvc 讓你可以使用如窗體認(rèn)證和windows 認(rèn)證、 url 認(rèn)證、

20、組管理和規(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)容在修改時(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ù)庫對(duì)象和數(shù)據(jù)的快照開始, 并且用觸發(fā)器跟蹤在發(fā)布

21、器和訂閱服務(wù)器上所做的后續(xù)更改和架構(gòu)修改;訂閱服務(wù)器在連接到網(wǎng)絡(luò)時(shí)將與發(fā)布服務(wù)器進(jìn)行同步,并交換自上次同步以來發(fā)布服務(wù)器和訂閱服務(wù)器之間發(fā)生更改的所有行;5 、 請(qǐng)你談一談你對(duì)值類型與引用類型的理解?1. 所有對(duì)象都繼承自System.Object ,而所有的值類型都繼承自System.ValueType。也就是說,System.ValueType重寫了 System.Object的方法使得值類型的操作是基于值而 不是基于引用。2. 值類型內(nèi)存分配在棧上, 引用類型內(nèi)存分配在托管堆中。 內(nèi)存分配在這兩個(gè)地方的區(qū)別在于:如果超出了值類型定義的范圍,值類型分配的內(nèi)存會(huì)立刻從內(nèi)存中清除,即它的內(nèi)存生

22、命周期是可以預(yù)測(cè)的。而引用類型分配在托管堆中,內(nèi)存管理有垃圾處理器控制,不可預(yù)知其生命周期。3. 賦值操作值類型賦值操作是會(huì)依次copy 所有成員變量的值。引用類型僅僅是地址重定向。4. 參數(shù)傳遞默認(rèn)為值傳遞,即參數(shù)為值類型是傳遞值類型的值副本,參數(shù)為引用類型時(shí)傳遞引用類型地址值副本。但當(dāng)參數(shù)使用 out 或者ref 關(guān)鍵字是,傳遞的是引用本身。但是在使用 ref ,需要注意一些區(qū)別:當(dāng)參數(shù)為引用類型時(shí),不使用 ref 關(guān)鍵字,方法還是可以通過傳入的引用改變其所指向的實(shí)例,但是不能改變引用本身。 當(dāng)參數(shù)為引用類型時(shí),同時(shí)使用 ref 關(guān)鍵字,方法可以通過傳入的引用改變其所指向的實(shí)例,并且改變引

23、用本身。 5. 值類型是 sealed 的,不能繼承6. 值類型不能寫Finalize()方法,該方法用于堆上的內(nèi)存回收。7. 裝箱與拆箱裝箱- 把值類型轉(zhuǎn)換為引用類型。拆箱- 把引用類型轉(zhuǎn)換為值類型。作用:可以把值類型也看作是對(duì)象。最常使用的情況是在集合操作的時(shí)候,大多數(shù)方法接口都接收一個(gè)對(duì)象參數(shù)(object)。當(dāng)傳入值類型時(shí),.NET會(huì)自動(dòng)處理裝箱細(xì)節(jié),把值類型轉(zhuǎn)變?yōu)橐妙愋?。從集合取出時(shí),把引用類型的值取出放回值類型變量。缺點(diǎn):性能上有損失。并且缺少類型安全保證。 .NET 2.0推出了泛型基本上能解決這個(gè)問題。6 、 private 、 protected 、 public 和 in

24、ternal 的區(qū)別 ?private 是完全私有的, 只有在類自己里面可以調(diào)用, 在類的外部和子類都不能調(diào)用,子類也不能繼承父類的 private 的屬性和方法。protected 雖然可以被外界看到, 但外界卻不能調(diào)用, 只有自己及自己的子類可以調(diào) 用( protected 的屬性和方法都可以被子類所繼承和調(diào)用) 。private 和 protected 的共同點(diǎn):外部都不可以訪問。private 和 protected 的不同點(diǎn): 在同一類中可視為一樣, 但在繼承中就不同了, private 在派生類中不可以被訪問,而protected 可以。public 對(duì)任何類和成員都完全公開,無限

25、制訪問。internal同一應(yīng)用程序集內(nèi)部(在VS.NET中的一個(gè)項(xiàng)目中,這里的項(xiàng)目是指單獨(dú)的項(xiàng)目,而不是整個(gè)解決方案)可以訪問。public 和 internal 的區(qū)別: public 的成員可以跨程序集,但internal 不能,同一程序集中具有相同的效果。protected internal :只能在同一應(yīng)用程序集內(nèi)本類、派生類訪問。7、ASPNET如何進(jìn)行性能優(yōu)化問題?我們將從5方面來進(jìn)行ASPNET性能優(yōu)化:一、 SqlDataRead 和 Dataset 的選擇Sqldataread 優(yōu)點(diǎn):讀取數(shù)據(jù)非???。如果對(duì)返回的數(shù)據(jù)不需做大量處理的情況下, 建議使用 SqlDataRead

26、er, 其性能要比datset 好很多。 缺點(diǎn): 直到數(shù)據(jù)讀完才可close掉于數(shù)據(jù)庫的連接(SqlDataReader 讀數(shù)據(jù)是快速向前的。 SqlDataReader 類提供了一種讀取從SQLServer 數(shù)據(jù)庫檢索的只進(jìn)數(shù)據(jù)流的方法。它使用 SQL Server 的本機(jī)網(wǎng)絡(luò)數(shù)據(jù)傳輸格式從數(shù)據(jù)庫連接直接讀取數(shù)據(jù)。DataReader需及時(shí)顯式的close??杉皶r(shí)的釋放對(duì)數(shù)據(jù)的連接。 )Dataset 是把數(shù)據(jù)讀出,緩存在內(nèi)存中。缺點(diǎn):對(duì)內(nèi)存的占用較高。如果對(duì)返回的數(shù)據(jù)需做大量的處理用 Dataset 比較好些可以減少對(duì)數(shù)據(jù)庫的連接操作。優(yōu)點(diǎn):只需連接一次就可close 于數(shù)據(jù)庫的連接一般情

27、況下,讀取大量數(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ù)傳輸。它僅僅返回受影響的行數(shù)。如果只需更新數(shù)據(jù)用 ExecuteNonQuery 性能的開銷比較小。ExecuteScalar 它只返回結(jié)果集中第一行的第一列。使用 ExecuteScalar 方法從數(shù)據(jù)庫中檢索單個(gè)值 (例如 id 號(hào)) 。

28、 與使用 ExecuteReader 方法, 返回的數(shù)據(jù)執(zhí)行生成 單個(gè)值所需的操作相比,此操作需要的代碼較少。只需更新數(shù)據(jù)用ExecuteNonQuery.單個(gè)值的查詢使用ExecuteScalar數(shù)據(jù)綁定的選擇三、數(shù)據(jù)的綁定 DataBinder一 般 的 綁 定 方 法 <%# DataBinder.Eval(Container.DataItem, " 字 段 名 ") %>用 DataBinder.eval 綁定不必關(guān)心數(shù)據(jù)來源(Dataread 或 dataset) 。不必關(guān)心數(shù)據(jù)的類型eval會(huì)把這個(gè)數(shù)據(jù)對(duì)象轉(zhuǎn)換為一個(gè)字符串。在底層綁定做了很多工作,使

29、用了反射性能。正因?yàn)槭褂梅奖懔耍?但卻影響了數(shù)據(jù)性能。 來看下 <%# DataBinder.Eval(Container.DataItem, " 字段名 ") %>。當(dāng)于dataset 綁定時(shí), DataItem 其實(shí)式一個(gè)DataRowView (如果綁定的是一個(gè)數(shù)據(jù)讀取器( dataread )它就是一個(gè)IdataRecord 。 )因此直接轉(zhuǎn)換成DataRowView的話,將會(huì)給性能帶來很大提升。 <%# ctype(Container.DataItem,DataRowView).Row(" 字段名 ") %> 對(duì)數(shù)據(jù)的綁

30、定建議使用 <%# ctype(Container.DataItem,DataRowView).Row(" 字段名") %>。 數(shù)據(jù)量大的時(shí)候可提高幾百倍的速度。使用時(shí)注意2 方面: 1.需在頁面添加<%Import namespace="System.Data"%>.2.注意字段名的大小寫(要特別注意) 。如果和查詢 的不一致,在某些情況下會(huì)導(dǎo)致比 <%# DataBinder.Eval(Container.DataItem, "字段名 ") %> 還 要 慢 。 如 果 想 進(jìn) 一 步 提 高

31、速 度 , 可 采 用 <%#ctype(Container.DataItem,DataRowView).Row(0) %> 的方法。不過其可讀性不高。以上的是 的寫法。在 c#中:<% (DataRowView)Container.DataItem)" 字段名 " %>對(duì)查看頁面每個(gè)執(zhí)行過程狀態(tài)最簡單的辦法:其頁面的 trace 屬性為 true 就可查看細(xì)節(jié)。一、使用存儲(chǔ)過程:1、性能方面:存儲(chǔ)過程提供了許多標(biāo)準(zhǔn)sql 語言中所沒有的高級(jí)特性。其傳遞參數(shù)和執(zhí)行邏輯表達(dá)式的功能,有助于應(yīng)用程序設(shè)計(jì)者處理復(fù)雜任務(wù)。另外,存儲(chǔ)過程存儲(chǔ)在本地服務(wù)器上,減

32、少了執(zhí)行該過程所需的網(wǎng)絡(luò)傳輸寬帶和執(zhí)行時(shí)間。 (存儲(chǔ)過程已經(jīng)對(duì) sql 語句進(jìn)行了預(yù)編譯,所以其執(zhí)行速度比在程序里執(zhí)行sql 語句快很多)2、程序結(jié)構(gòu)方面:從程序的可擴(kuò)展性看,使用存儲(chǔ)過程會(huì)對(duì)程序以后的修改帶來方便。比如數(shù)據(jù)庫的結(jié)構(gòu)改變了,只需修改相對(duì)應(yīng)的存儲(chǔ)結(jié)構(gòu),和程序中的調(diào)用部分即可。這部分不屬于本文探討范圍,屬于程序結(jié)構(gòu)設(shè)計(jì)方面。所以不在此展開。3、程序安全性:使用存儲(chǔ)過程可避免SQL Injection 攻擊。二、查詢語句的優(yōu)化(針對(duì) sql server2000 )很多人只為目的寫出 sql 語句, 而不考慮 sql 語句的執(zhí)行效率。 在這我只提供一優(yōu)化表順序的方法, ( sql 語

33、句的優(yōu)化和原則將會(huì)在我的 sql server2000 學(xué)習(xí)筆記中專題討 論)對(duì) sql 語句執(zhí)行效率可用 sql server2000 的查詢分析器來查看語句的執(zhí)行過程。優(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 表。它的選擇原則是相對(duì)于該查詢限制為單行或少數(shù)幾行,就可以減少在其他表中查找的總數(shù)據(jù)量。絕大

34、多數(shù)情況下, sql server 會(huì)作出最優(yōu)的選擇,但如果你發(fā)覺某個(gè)復(fù)雜的聯(lián)結(jié)查詢速度比預(yù)計(jì)的要慢,就可以使用SET FORCEPLANNg句弓II制sql server按照表出現(xiàn)順序使用表。 如上例加上:SET FORCEPLAN ON.SET FORCEPLAN OFF的 執(zhí)行順序?qū)?huì)按照你所寫的順序執(zhí)行。在查詢分析器中查看2 種執(zhí)行效率,從而選擇表的連接順序。使用SET FORCEPLA睡擇表聯(lián)結(jié)順序三、頁面的優(yōu)化( .aspx) 主要針對(duì)幾個(gè)頁面屬性1、EnableViewState(頁面的視圖狀態(tài) )。如果無特殊要求設(shè)置為false。使用ViewState , 每個(gè)對(duì)象都必須先序列

35、化到 ViewState 中, 然后再通過回傳進(jìn)行反序列化,因此使用 ViewState 是沒有代價(jià)的。盡量減少使用對(duì)象,如果可能,盡量減少放入ViewState 中的對(duì)象的數(shù)目。下面情況基本上可以禁用 viewstate :( 1 )頁面控件( .ascx)( 2 )頁面不回傳給自身。( 3 )無需對(duì)控件的事件處理。( 4 )控件沒有動(dòng)態(tài)的或數(shù)據(jù)綁定的屬性值(或?qū)τ诿總€(gè)postpack 都在代碼中處理)單個(gè)頁面或每個(gè)頁面都禁用 ViewState ,如下所示:單個(gè)頁面: <% Page EnableViewState="False" %> 每個(gè)頁面: 在 web.config 中 <Pages EnableViewState="false" /> EnableSessionState 保持默認(rèn)值即可(如果頁面用到 sessionstate 它才會(huì)占用資源) 。 EnableViewStateMac 如果無安全上的特殊要求,保持默認(rèn)值。2、Pagelayout.頁面布局模型。建議使用Flowlayout(元素不帶絕對(duì)定位屬性添加).Gridlayout(絕對(duì)定位屬性)由于采用絕對(duì)定位,將會(huì)比 Flowlayout生產(chǎn)更多的代

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論