Neo's Blog

首頁 相本 討論 書籤

分類目錄
本站日誌 (51)
碎碎唸啦 (173)
網站架設 (84)
程式設計 (161)
軟體使用 (69)
電子商務 (126)
經營奇想 (48)
基金理財 (11)
聰明消費 (87)
電影心得 (47)
開放原碼 (16)
工作記錄 (2)
毛毛小記 (9)
就是不同 (2)




歷史資料
 




April 26, 2005
[VB.Net] 正確的釋放 ADODB.Recordset 資料庫連線

先注意一下,本文是以 ADODB.Recordset 直接用 Connection String 連線做說明,並未透過 ADODB.Connection 來連接資料庫。

ADODB.Recordset 資料庫連線開啟:

Dim rs As New ADODB.Recordset
Dim ConnectionString as String = "provider=sqloledb;server=localhost;database=northwind;uid=sa"
rs.Open("SELECT * FROM products", ConnectionString, ADODB.CursorTypeEnum.adOpenForwardOnly,ADODB.LockTypeEnum.adLockReadOnly)

ADODB.Recordset 開啟之後,所有 SQL 的動作處理完後,就是要釋放掉 ADODB.Recordset 的資源,但是絕大多數的人會拿以前 Visual BASIC 的釋放方式,也就是:

        rs.Close()
        rs = Nothing

如果在 VB.Net 裡面這樣寫,資料庫連線並不會因此而釋放,正確的釋放方式應該是:

        rs.Close()
        rs.ActiveConnection = Nothing

沒有正確釋放 Connection 會造成 SQL Server 的 Process 一直佔住資源,在系統執行的過程中也可以明顯看到 sqlservr.exe 佔的記憶體直線上昇,一旦到了記憶體的上限值就便會造成系統跟資料庫之間的連線緩慢或是 Timeout 的狀況發生,所以正確的釋放連線對系統來說是非常重要的一件事。

 
由 Neo 發表於 April 26, 2005 01:31 AM 收進你的MyShare個人書籤  

你好,因為我公司正在經歷這個問題,SqlServr.exe不斷的在吃記憶體,在Google搜尋下,找到您的網站,想請教的是,我是用VB6開發的,應該沒有您所講的.NET沒有正確釋放記憶體,為何還是一直吃下去呢?謝謝您的指教


Jack Chen 發表於 July 29, 2006 10:20 AM
發表迴響  
(*星號開頭為必填欄位)











(請輸入您看到的數字,看不到請按右鍵->顯示圖片)


記住我的資訊?







Copyright 2005 Neo's Blog All rights reserved.