asp中ADO的最佳化

來源:互聯網
上載者:User
1 Connection
1.1 Pooling
  在Web Application中,常常會出現同時有很多使用者同時訪問資料庫的情況,而且ASP中的對象範圍是頁面級的,也就是說,每個頁面都要聯結和斷開資料庫,豈不是會很慢?而且每個到SQL Server資料庫的聯結會帶來37k的系統開銷,怎麼辦?
  可能有人會想到用Application和Session來解決問題,但是,這是不可取的,如果用Application,那麼會出現多個使用者同時通過一個Connection訪問資料庫的情況,雖然節省了建立串連的時間,但是訪問資料庫的速度就會變得非常慢。如果用Session,出現的問題就是,Session逾時怎麼辦?如果把Session.Timeout設得很大,那使用者離開之後,串連還會保留一段時間,也會帶來額外的開銷。
  其實根本不用考慮這個問題,通過OLE DB訪問資料庫,它會替你解決這個問題,OLE DB有一個Resource Pooling,它會代理你的串連請求,然後把別人剛用過的串連給你接著用。(具體機制不再闡述,其實我也沒搞太明白,嘻嘻)
1.2 Provider
  可能沒有多少人用過這個Property吧,它的預設值是MSDASQL,還有MSIDXS和ADSDSOObject,但是在ADO2.0(見VS98)和ADO2.1(見SQL7)裡面提供了一些新的Provider:
MSDAORA (OLE DB Provider for Oracle)
Microsoft.Jet.OLEDB.3.51(OLE DB Provider for Microsoft Jet( for ACCESS))
SQLOLEDB(Microsoft SQL Server OLE DB Provider)
  如果你所用的資料庫是這些的話,用這些新的Provider就可以不通過ODBC而直接存取資料庫,提高的效率就可想而知了。
2 Command
2.1 CommandType
  預設值是adCmdUnknown,ADO會逐個判斷你的CommandType,直到它認為合適為止,不建議採用。(在Recordset.Open和Connection.Execute的時候也可以用)
  adCmdText是照原樣執行你的SQL語句,但是如果你的SQL Language是以下幾種的話,通過使用別的CommandType就可以提高你的SQL語句執行效率
objCmd.Execute "Select * from table_name", adCmdText可替換為objCmd.Execute "table_name",adCmdTable
objCmd.Execute "Exec proceuure_name",adCmdText可替換為objCmd.Execute "proceuure _name", adCmdStoredProc
  還有很重要的一點就是,如果你的SQL語句沒有返回記錄集,如insert和update等,那麼使用adExecuteNoRecords(ADO2.0)可以減低系統開銷(可以加到adCmdText 和adCmdStoredProc上,如adCmdStoredProc + adExecuteNoRecords)
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.