Asp.Net数据库编程-10条最优方法[翻译]
生活随笔
收集整理的這篇文章主要介紹了
Asp.Net数据库编程-10条最优方法[翻译]
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Asp.Net數(shù)據(jù)庫編程-10條最優(yōu)方法[翻譯]
原文標(biāo)題:Using Data with ASP.Net - 10 of my 'Best Practices'原文鏈接:http://www.developerdotstar.com/community/node/531?(By?Chris Gaskell)
翻 譯:bigqiang(多多小蟲)
說 明:學(xué)習(xí)之用,翻譯未經(jīng)原作者許可 完全不能說:任何嚴(yán)謹(jǐn)?shù)某绦騿T在他們的職業(yè)生涯中極少有時間處理數(shù)據(jù)庫編程。因此要求你涉及底層數(shù)據(jù)庫的代碼盡可能高效非常合理。希望能把我在應(yīng)用ADO.Net編程時所了解的一些最佳編程方法與你分享。也希望你能在使用過程中發(fā)現(xiàn)和我所說的同樣有效。 最優(yōu)方法 #1
使用內(nèi)置.Net data providers 內(nèi)置的.Net data providers允許你充分利用.Net框架特點(diǎn)以及高效發(fā)揮數(shù)據(jù)庫的潛力。 最優(yōu)方法 #2
總是使用conifg文件保存數(shù)據(jù)庫連接字串。同時加密連接字串特別是數(shù)據(jù)庫位置不確定時。 在程序外部的數(shù)據(jù)庫可能會變動位置,這樣可以很容易的更改config文件中的連接字串。從安全角度講加密連接字串很明智。 最優(yōu)方法 #3
優(yōu)先作用SQL Server的排序方法,諸如:ORDER BY,HAVING 以及 GROUP BY 這些語句。 在服務(wù)器端執(zhí)行排序而不是在客戶端,這會更節(jié)省時間,因?yàn)榉?wù)器端完成任務(wù)更快。 最優(yōu)方法 #4
盡力設(shè)法限定返回結(jié)果集合的行數(shù),具有代表性的方法是使用 TOP 關(guān)鍵詞,當(dāng)然還有其它類似的方法。 限制發(fā)送信的息數(shù)據(jù)量程序會更快 最優(yōu)方法 #5
當(dāng)使用一個 Command 對象的 ExecuteReader 方法時,最好使用CommandBehavior.CloseConnection 這種方式提供了良好的連接池,能讓連接迅速打開和返回。 最優(yōu)方法 #6
如果在關(guān)閉DataReader對象之前你就已經(jīng)結(jié)束讀取不再想讀取更多記錄行的最好馬上取消讀取操作。 DataReader類的關(guān)閉方法最終關(guān)閉對象前會不斷讀取所有余下的記錄行。這太浪費(fèi)資源。 最優(yōu)方法 #7
最好使用參數(shù)化的command(通常是存儲過程)來處理動態(tài)的SQL查詢。 這會改善性能減少SQL注入攻擊的機(jī)會,同時你的代碼也更容易維護(hù)。 最優(yōu)方法 #8
在處理50或50條以上的記錄行時最好對排序結(jié)果集進(jìn)行分頁。 雖然多數(shù)情況下使用分頁技術(shù)不太容易,但是它能讓服務(wù)器端數(shù)據(jù)庫和客戶端應(yīng)用程序減少任一時刻的開銷和網(wǎng)絡(luò)流量提高性能, 最優(yōu)方法 #9
在所有記錄中加一個時間戳字段——我通常用‘creationdate’(創(chuàng)建日期)、‘lastupdate’(最后更新日期)字段。 數(shù)據(jù)庫內(nèi)容被更新時,這會更容易檢查。同時也更容易檢查代碼與數(shù)據(jù)源互操作的正確性。 最優(yōu)方法 #10
不要通過象 “SELECT * ”這樣的方式返回?cái)?shù)據(jù)。 盡管一個“SELECT *”語句是編程最快速的寫法,但它肯定是返回所有記錄操作速度最慢的,難道你真的需要頻繁訪問所有列記錄嗎?請明確寫出你要訪問的列字段。 ============================= 譯文結(jié)束,以下是一些我看到的一些評論也一并翻譯出來: ------------- Phil(http://weblogs.asp.net/plip):
關(guān)于第5條,我更進(jìn)一步。要確保你使用using語句
Using Conn As New SqlConnection()
using (SqlConnection Conn = new SqlConnection())
這會確保清空所有資源。 ------------- Michel(http://blogs.wdevs.com/qc/):
關(guān)于第6條“DataReader類的關(guān)閉方法最終關(guān)閉對象前會不斷讀取所有余下的記錄行”。你肯定嗎?我認(rèn)為在Read()方法中就完成了這個工作。 ------------- Shahed Khan(http://geekswithblogs.net/shahed):
為了回答第10條“難道你真的需要頻繁訪問所有列記錄嗎?”,我想說有許多人在使用N層模型的業(yè)務(wù)對象中使用了所有的列字段并且填充大量的業(yè)務(wù)對象。
Chris Gaskell回復(fù):我明白你所說的依據(jù)是什么,但是在你的業(yè)務(wù)DTO(譯者:詳細(xì)的試驗(yàn)?zāi)繕?biāo)?)中你也要包括諸如“DateCreated”和“LastModified”這樣的字段嗎? ------------- David Parslow(http://parslow.spaces.msn.com/):
動態(tài)SQL查詢實(shí)現(xiàn)以參數(shù)化command的來改善性能(想象中優(yōu)于存儲過程,但此處有爭議),減少了SQL注入攻擊的機(jī)會(因?yàn)樗粎?shù)化了),并且更容易維護(hù)代碼(可以和OR-Mapper或者類似的技術(shù))。所遇到的這些問題應(yīng)該是靜態(tài)查詢(這比較常見) Chris Gaskell回復(fù):似乎我給動態(tài)SQL查詢一詞的定義并不清楚。請看下面的一個動態(tài)查詢示例(我想你能發(fā)現(xiàn)這和你的靜態(tài)查詢描述比較符合)
sql = @"SELECT Col1, Col2 FROM table WHERE id=" + id; ------------- Richard Jonas(http://www.richardjonas.com/blog):
我想補(bǔ)充一個方法:
建立一個有限數(shù)量SQL查詢列表,并把它保存在一個共用文件里,而不是讓這些查詢語句出現(xiàn)在所有代碼文件當(dāng)中。 如果以后更改數(shù)據(jù)庫,這會產(chǎn)生一些問題,計(jì)劃中要更改所有影響SQL查詢的文件,如果把SQL查詢保存在一個共用文件里,并限制數(shù)量,這會減少更改量降低遺漏某些重要問題的風(fēng)險(xiǎn)。
總結(jié)
以上是生活随笔為你收集整理的Asp.Net数据库编程-10条最优方法[翻译]的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【算法分析与设计】DFS与BFS的区别
- 下一篇: 作者:孔新川,杭州迈宁数据科技有限公司创