關(guān)于vb.net釋放數(shù)據(jù)庫(kù)的信息

vb.net 關(guān)閉窗口 內(nèi)存不能釋放

1.如果你釋放的是托管托管代碼的內(nèi)存,那么托管代碼的內(nèi)存管理是自動(dòng)的,.NET可以保證我們的托管程序在結(jié)束時(shí)全部釋放。

陽(yáng)東網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),陽(yáng)東網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為陽(yáng)東近1000家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)公司要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的陽(yáng)東做網(wǎng)站的公司定做!

2.如果是非托管資源時(shí).NET就不能自動(dòng)管理了,下面是釋放非托管資源內(nèi)存方法

當(dāng)我們利用如數(shù)據(jù)庫(kù)、文件等非托管資源時(shí),就要用到.NET Framework中的標(biāo)準(zhǔn): IDisposable接口。按照標(biāo)準(zhǔn),所有有需要手動(dòng)釋放非托管資源的類都得實(shí)現(xiàn)此接口。這個(gè)接口只有一個(gè)方法,Dispose(),不過(guò)有相對(duì)的 Guidelines指示如何實(shí)現(xiàn)此接口,在這里我向大家說(shuō)一說(shuō)。實(shí)現(xiàn)IDisposable這個(gè)接口的類需要有這樣的結(jié)構(gòu):

[Visual Basic]

Public Class Base

Implements IDisposable

Public Overloads Sub Dispose() Implements IDisposable.Dispose

Me.Dispose(True)

GC.SuppressFinalize(Me)

End Sub

Protected Overloads Overridable Sub Dispose(ByVal disposing As Boolean)

If disposing Then

' 托管類

End If

' 非托管資源釋放

End Sub

Protected Overrides Sub Finalize()

Me.Dispose(False)

MyBase.Finalize()

End Sub

End Class

Public Class Derive

Inherits Base

Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)

If disposing Then

' 托管類

End If

' 非托管資源釋放

MyBase.Dispose(disposing)

End Sub

End Class

我們要實(shí)現(xiàn)Dispose方法,實(shí)現(xiàn)這個(gè)Dispose方法的幾個(gè)準(zhǔn)則:

它不能扔出任何錯(cuò)誤,重復(fù)的調(diào)用也不能扔出錯(cuò)誤。也就是說(shuō),如果我已經(jīng)調(diào)用了一個(gè)對(duì)象的Dispose,當(dāng)我第二次調(diào)用Dispose的時(shí)候程序不應(yīng)該出錯(cuò),簡(jiǎn)單地說(shuō)程序在第二次調(diào)用Dispose時(shí)不會(huì)做任何事。這些可以通過(guò)一個(gè)flag或多重if判斷實(shí)現(xiàn)。

一個(gè)對(duì)象的Dispose要做到釋放這個(gè)對(duì)象的所有資源。拿一個(gè)繼承類為例,繼承類中用到了非托管資源所以它實(shí)現(xiàn)了IDisposable接口,如果繼承類的基類也用到了非托管資源那么基類也得被釋放,基類的資源如何在繼承類中釋放呢?當(dāng)然是通過(guò)一個(gè)virtual/Overridable方法了,這樣我們能保證每個(gè)Dispose都被調(diào)用到。這就是為什么我們的設(shè)計(jì)有一個(gè)virtual/Overridable的Dispose方法。注意我們首先要釋放繼承類的資源然后再釋放基類的資源。

因?yàn)榉峭泄苜Y源一定要被保障正確釋放所以我們要定義一個(gè)Finalizer來(lái)避免程序員忘了調(diào)用Dispose的情況。上面的設(shè)計(jì)就采用了這種形式。如果我們手動(dòng)調(diào)用Dispose方法就沒(méi)有必要再保留Finalizer了,所以在Dispose中我們用了GC.SupressFinalize 將對(duì)象從Finalizer表去掉,這樣再回收時(shí)速度會(huì)更快。

那么那個(gè)disposing和"托管類"是怎么回事呢?是這樣:在"托管類"中寫所有你想在調(diào)用Dispose時(shí)讓其處于可釋放狀態(tài)的托管代碼。還記得我們說(shuō)過(guò)我們不知道托管代碼是什么時(shí)候釋放的嗎?在這里我們只是去掉成員對(duì)象的引用讓它處于可被回收狀態(tài),并不是直接釋放內(nèi)存。在"托管類"中這里我們也要寫上所有實(shí)現(xiàn)了IDisposable的成員對(duì)象,因?yàn)樗麄円灿蠨ispose,所以也需要在對(duì)象的Dispose中調(diào)用他們的 Dispose,這樣才能保證第二個(gè)準(zhǔn)則。disposing是為了區(qū)分Dispose的調(diào)用方法,如果我們手動(dòng)調(diào)用那么為了第二個(gè)準(zhǔn)則"托管類"部分當(dāng)然得執(zhí)行,但如果是Finalizer調(diào)用的Dispose,這時(shí)候?qū)ο笠呀?jīng)沒(méi)有任何引用,也就是說(shuō)對(duì)象的成員自然也就不存在了(無(wú)引用),也就沒(méi)有必要執(zhí)行"托管類"部分了,因?yàn)樗麄円呀?jīng)處于可被回收狀態(tài)了。好了,這就是IDisposable接口的全部了?,F(xiàn)在讓我們來(lái)回想一下,以前我們可能認(rèn)為有了 Dispose內(nèi)存就會(huì)馬上被釋放,這是錯(cuò)誤的。只有非托管內(nèi)存才會(huì)被馬上釋放,托管內(nèi)存的釋放由GC管理,我們不用管。

vb.net的數(shù)據(jù)庫(kù)怎么連接啊?

Dim

sqlConnection1

As

SqlClient.SqlConnection

 Dim

strConnect

As

String=”data

source=服務(wù)器名;initial

catalog=數(shù)據(jù)庫(kù)名;user

id=sa;password=;”

sqlConnection1=New

System.Data.SqlClient.SqlConnection(strConnect)

 sqlConnection1.open

‘打開數(shù)據(jù)庫(kù)

sqlConnection1.close

‘關(guān)閉連接,釋放資源

1)連接Sql

Server數(shù)據(jù)庫(kù)

Dim

odbcDbConnetion1

As

Microsoft.Data.OdbcConnection

 Dim

strConnect

As

Sting=”Driver={SQL

Server};Server=服務(wù)器名;Uid=sa;pwd=;Database=

數(shù)據(jù)庫(kù)名;”

 odbcDbConnetion1=New

Microsoft.Data.OdbcConnection(strConnect)

VB.NET2010調(diào)用利用水晶報(bào)表2013的API,給Oracle創(chuàng)建session后不能釋放session的問(wèn)題

你的數(shù)據(jù)庫(kù)是出于什么模式運(yùn)行,是專用模式還是共享模式呢,如果是共享模式的話可能是你的會(huì)話數(shù)達(dá)到上限,執(zhí)行命令查看show

parameter

process;再查看select

county(*)

from

v$process;

比較一下這兩個(gè)數(shù)值是否超過(guò)進(jìn)程上限,如果要查看你的數(shù)據(jù)庫(kù)是否出于共享模式還是專用模式可以執(zhí)行如下語(yǔ)句select

distinct

server

from

v$session;如果值全是ditected

則為專用模式,如果有shared則為共享模式,共享模式經(jīng)常會(huì)導(dǎo)致樓主這樣的問(wèn)題,導(dǎo)致會(huì)話數(shù)達(dá)到上限,資源部夠用的情況

不過(guò),個(gè)人感覺(jué)的話,報(bào)表出錯(cuò)太頻繁會(huì)影響工作效率,你要是經(jīng)常出現(xiàn)這類狀況的話還是考慮換一下finereport,后者的出錯(cuò)率不會(huì)有這么高

用VB.Net訪問(wèn)SQLServer 數(shù)據(jù)庫(kù)訪問(wèn)完之后,關(guān)閉連接并釋放,但SQL Server的sysprocesses表中還有連接記錄

你是關(guān)閉本地的,又沒(méi)有立即關(guān)閉遠(yuǎn)程Server上的,他是個(gè)pip協(xié)議對(duì)等試的連接,打個(gè)比方,兩個(gè)電腦要共享一個(gè)文件夾,不能說(shuō)直接用一臺(tái)電腦配好就可以看吧,要設(shè)置共享協(xié)議。

這邊釋放關(guān)閉連接不代表就更新了另一臺(tái)電腦,他還是在判斷有無(wú)連接響應(yīng),這就是為什么連接多了會(huì)形成“死鎖”。

文章標(biāo)題:關(guān)于vb.net釋放數(shù)據(jù)庫(kù)的信息
鏈接地址:http://muchs.cn/article22/dospgjc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站網(wǎng)站維護(hù)、網(wǎng)站收錄、靜態(tài)網(wǎng)站、定制網(wǎng)站、企業(yè)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)