国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

MySqlDataReader在Using中使用

2019-11-17 02:19:36
字體:
供稿:網(wǎng)友

MySQLDataReader在Using中使用

結(jié)論:當(dāng)DataReader放在Using方法中時(shí),會(huì)自動(dòng)釋放資源,如果中途出現(xiàn)了異常處理,也同樣會(huì)釋放掉占用的資源。測(cè)試過程:這里由于沒有將全部分過程記錄下來,只是對(duì)結(jié)果大體的說明一下,有興趣的童鞋可以自己測(cè)試。首先正常的處理流程:

1 MySqlDataReader dr = MySqlHelper.ExecuteReader(MySqlHelper.Conn, CommandType.Text, sqlStr, parameters)2 while (dr.Read())3 {4 keyWords.Add(dr["KeyWord"].ToString());5 }6 dr.Close()
View Code

這樣處理貌似是沒問題,不過在測(cè)試中,如果“keyWords.Add(dr["KeyWord"].ToString());”出現(xiàn)了異常,此時(shí),程序會(huì)調(diào)到異常處理的模塊,這樣,就造成了下邊的close方法不會(huì)被執(zhí)行到,從而造成了數(shù)據(jù)庫(kù)連接數(shù)的不斷累加,當(dāng)達(dá)到最大值時(shí),問題就顯露出來了。

下邊第一種處理方式采用異常處理:

 1 MySqlDataReader dr = MySqlHelper.ExecuteReader(MySqlHelper.Conn, CommandType.Text, sqlStr, parameters); 2 try{ 3 while (dr.Read()) 4 { 5 keyWords.Add(dr["KeyWord"].ToString()); 6 } 7 } 8 catch(){ 9 }10 finnally{11 dr.Close();12 }
View Code

毫無疑問,這個(gè)方法很容易想到。

第二種處理方式,這里打算使用using方法進(jìn)行處理。但是根據(jù)理論知識(shí),認(rèn)為這個(gè)是可以的。但是真實(shí)的程序運(yùn)行環(huán)境,確實(shí)有時(shí)不能以理論知識(shí)來指導(dǎo)。現(xiàn)在程序在這,有一個(gè)很合適的測(cè)試環(huán)境,為什么不自己測(cè)試下呢?于是就出現(xiàn)了一下的過程:我是用的是MySql數(shù)據(jù)庫(kù),C#編寫的程序。首先補(bǔ)充一些基礎(chǔ)知識(shí)1、Using定義范圍:即時(shí)釋放資源,在范圍結(jié)束時(shí)釋放資源。當(dāng)在某個(gè)代碼段中使用了類得實(shí)例,而希望無論什么原因,只要離開了這個(gè)代碼段就自動(dòng)調(diào)用這個(gè)類實(shí)例的Dispose方法釋放資源。到達(dá)using語句末尾或者中途引發(fā)了異常并且控制離開了語句塊,即觸發(fā)實(shí)例的Dispose方法釋放資源。然后查看MySqlDataReader的實(shí)現(xiàn): public sealed class MySqlDataReader : DbDataReader, IDataReader, IDisposable, IDataRecord{...}確實(shí)繼承了IDisposable方法,理論上應(yīng)該是正確的。2、MySql查看連接數(shù):命令: show PRocesslist;如果是root帳號(hào),你能看到所有用戶的當(dāng)前連接。如果是其它普通帳號(hào),只能看到自己占用的連接。show processlist;只列出前100條,如果想全列出請(qǐng)使用show full processlist;

有了這兩點(diǎn)理論知識(shí),下邊的測(cè)試就容易多了:1、不使用using也不關(guān)閉連接:

1 MySqlDataReader dr = MySqlHelper.ExecuteReader(MySqlHelper.Conn, CommandType.Text, sqlStr, parameters);2 while (dr.Read())3 {4 keyWords.Add(dr["KeyWord"].ToString());5 }
View Code

測(cè)試,連接數(shù)不斷增多。

2、不使用,采用關(guān)閉操作:

1 MySqlDataReader dr = MySqlHelper.ExecuteReader(MySqlHelper.Conn, CommandType.Text, sqlStr, parameters);2 while (dr.Read())3 {4 keyWords.Add(dr["KeyWord"].ToString());5 }6 dr.Close()
View Code

測(cè)試,連接數(shù)不變化。

3、不使用Using,采用關(guān)閉操作,中間執(zhí)行過程制作一個(gè)異常:

1 MySqlDataReader dr = MySqlHelper.ExecuteReader(MySqlHelper.Conn, CommandType.Text, sqlStr, parameters);2 while (dr.Read())3 {4 keyWords.Add(dr["Keyord"].ToString());5 }6 dr.Close()
View Code

測(cè)試,連接數(shù)不斷增多。

4、采用Using,無異常的情況:

1 Using(MySqlDataReader dr = MySqlHelper.ExecuteReader(MySqlHelper.Conn, CommandType.Text, sqlStr, parameters))2 {3 while (dr.Read())4 {5 keyWords.Add(dr["KeyWord"].ToString());6 }7 }
View Code

測(cè)試,連接數(shù)未增加。

5、采用Using中間制作一個(gè)異常:

1 Using(MySqlDataReader dr = MySqlHelper.ExecuteReader(MySqlHelper.Conn, CommandType.Text, sqlStr, parameters))2 {3 while (dr.Read())4 {5 keyWords.Add(dr["Keyord"].ToString());6 }7 }
View Code

測(cè)試,連接數(shù)未增加。

經(jīng)過這幾步的測(cè)試,就有了最初的結(jié)論。

閑話不多說,實(shí)踐求真知。

Author:月夜Time:2015-06-09


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 日喀则市| 桦甸市| 揭西县| 沁阳市| 庆云县| 中山市| 若羌县| 井冈山市| 汉寿县| 和田市| 丹阳市| 兰考县| 沐川县| 静宁县| 泾川县| 鹤岗市| 秦皇岛市| 鄂托克前旗| 东莞市| 固原市| 渑池县| 友谊县| 永新县| 上林县| 临邑县| 全南县| 长宁区| 太和县| 吉安市| 嵊泗县| 荥阳市| 嵊州市| 蒙城县| 固阳县| 临夏市| 阜南县| 贡觉县| 贵德县| 阜平县| 天津市| 永登县|