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

首頁 > 學院 > 開發設計 > 正文

對C#中的Close()和Dispose()的淺析

2019-11-14 16:51:44
字體:
來源:轉載
供稿:網友

.net中的許多類都提供了Close()和Dispose()方法,一直以來我都以為它倆是一回事,是完全等價的,在任何地方,用其一即可。

有些類說Close比說Dispose更符合用戶的理解(如關閉連接、關閉流),所以這讓我覺得Close就是作為Dispose的另一種使用方式而存在,本來只需一個Dispose就夠了,事實上呢我寫的程序也沒有因為隨意使用它倆而造成過任何問題,所以一直以來沒深究。

今天做了個測試:

 1 SqlConnection conn = new SqlConnection("連接字符串"); 
 2 conn.Open();
 3   
 4 conn.Close();//先關閉
 5 Console.WriteLine(conn.State);//連接狀態:關閉
 6   
 7 Console.WriteLine(conn.ConnectionString);//此時連接字符串還在
 8 conn.Open();//再打開。正常
 9   
10 conn.Dispose();//先釋放
11 Console.WriteLine(conn.State);//連接狀態:關閉
12  
13 Console.WriteLine(conn.ConnectionString);//連接字符串已經置為空:string.Empty  

14 conn.Open();//再打開。拋異常 

測試結果:

1、兩者都關閉了數據庫連接

2、Close后數據庫連接可以再次打開;而Dispose后連接字符串被清空,連接不能再打開。

如此看來,Close和Dispose不完全是一回事?,F在似乎可以理解為,Close不負責銷毀對象,僅僅是根據類的功能,實現業務上的一個“關閉”,在本例,僅僅是改變了一下連接狀態(從連接→關閉);而Dispose,則是銷毀對象并釋放資源。換言之,Close只與業務有關,Dispose只與對象有關。所以被Close的對象可以再次使用,而Dispose則徹底銷毀。

 

注:原則上能 Dispose 的類就要 Dispose ,類似FileStream 的對象如果不在后面的代碼中使用,不用 close 直接Dispose 即可,Dispose其實隱含了close 的。
數據連接對象推薦使用 using 代碼塊自動釋放以防止中途出現異常,.net 不要把對象 = null; 在一般情況下.net的一個變量如 FileStream fs = new FileStream(@"C:/test.txt", FileMode.OpenOrCreate);這個只是一個地址而已,= null 是沒啥用的。如果等于null 反倒影響GC回收了。

綜上,得出淺顯結論:

1、Close負責關閉業務,Dispose負責銷毀對象。Dispose會負責Close的一切事務,額外還有銷毀對象的工作,即Dispose包含Close

2、當有明確需求的時候,不要混用二者

3、兩者連在一起用沒什么意義。要么關閉以便再次使用,要么銷毀不再使用。 

如各位有更好見解,歡迎指正。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 木里| 锦屏县| 登封市| 娄烦县| 杭州市| 家居| 焦作市| 泽州县| 南陵县| 马鞍山市| 黎平县| 屏南县| 河北区| 会理县| 瑞昌市| 甘孜县| 武汉市| 土默特左旗| 连云港市| 林芝县| 哈尔滨市| 二手房| 马公市| 满城县| 庄浪县| 贵阳市| 保康县| 吉安市| 都安| 昌宁县| 大足县| 韶关市| 罗田县| 灌阳县| 东丰县| 陆丰市| 德安县| 行唐县| 汤阴县| 信丰县| 图木舒克市|