A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 周大俊 黑马帝   /  2011-11-2 23:10  /  3144 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

两种方式,using 和try\finally,通常我会使用前者,但同时有不少人选择后者,两者有木有什么差异呢?

评分

参与人数 1技术分 +1 收起 理由
杨恩锋 + 1

查看全部评分

6 个回复

倒序浏览
本帖最后由 10642491 于 2011-11-2 23:54 编辑

用MSIL来看真正的底层代码,就可以看到Using本身实际就是try...catch....finally,喜欢using是因为能少写几个代码呵呵

评分

参与人数 1技术分 +1 收起 理由
杨恩锋 + 1

查看全部评分

回复 使用道具 举报
    看上去表面using减少了代码 其实using 是自动生成try finnly 如果 ADO.NET中的对象有多个对象的时候 using生成的try finnly会嵌套 ,生成多个try finnlly. 有多少个对象就有几个try finally .如果自己使用try finally,就用一个就够了.  而且using只能用于实现IDispose的对象 ,而try finally任何对象都行都能。 实际上对于ado.net的那些和数据库连接有关的对象,用using 和 try finally都一样 取决于个人习惯问题.

评分

参与人数 1技术分 +1 收起 理由
杨恩锋 + 1

查看全部评分

回复 使用道具 举报
using 主要是实现了IDispose接口,用完后马上释放。

评分

参与人数 1技术分 +1 收起 理由
杨恩锋 + 1

查看全部评分

回复 使用道具 举报
soga,学习了,3Q!不过我也用Reflector看,嘿嘿
回复 使用道具 举报
1.确保释放数据库连接资源的两种方式如下:
   a.使用try...catch...finally语句块,在finally块中关闭连接;
   b.使用using语句块,无论如何退出,都会自动关闭连接;
2.最好的方法是组合使用以上两种方式。
代码如下:
  1. using System;   
  2. using System.Data.SqlClient;   
  3.    
  4. namespace Magci.Test.DataAccess   
  5. {   
  6.     class Program   
  7.      {   
  8.         static void Main(string[] args)   
  9.          {   
  10.             string source = @"server=xiaobai\sqlexpress; integrated security=SSPI; database=msdb";   
  11.              SqlConnection conn = null;   
  12.             //使用try块处理   
  13.             try   
  14.              {   
  15.                  conn = new SqlConnection(source);   
  16.                  conn.Open();   
  17.                 //Do something   
  18.              }   
  19.             catch (Exception e)   
  20.              {   
  21.                 //Do something with the exception   
  22.              }   
  23.             finally   
  24.              {   
  25.                  conn.Close();   
  26.              }   
  27.    
  28.             //使用using块处理   
  29.             using (conn = new SqlConnection(source))   
  30.              {   
  31.                  conn.Open();   
  32.                 //Do something   
  33.              }   
  34.    
  35.             //两种组合方式   
  36.             try   
  37.              {   
  38.                 using (conn = new SqlConnection(source))   
  39.                  {   
  40.                      conn.Open();   
  41.                     //Do something   
  42.                      conn.Close();   
  43.                  }   
  44.              }   
  45.             catch (Exception e)   
  46.              {   
  47.                 //Do something with the exception   
  48.              }   
  49.          }   
  50.      }   
  51. }   
复制代码
回复 使用道具 举报
沙铁健 黑马帝 2011-11-3 10:19:18
7#
看个人喜好  我就是比较喜欢用using了     直观上来讲是一样的了  但是细看 就不一样了 ...呵呵
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马