仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 763|回复: 10
打印 上一主题 下一主题

[学习教程] ASP.NET教程之.NET,你健忘了么?(二)――利用using清算非托管资本仓酷云 ...

[复制链接]
海妖 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:25:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
学习asp.net两个月有余了,除了对html、web控件比较熟悉(应该是说都能理解和接受)之外,竟不知道自己还会什么。看了两本书:《精通asp.net网络编程》(人民邮电出版社)、《asp.net实用案例教程》(清华大学出版社)。系列文章目次索引:《.NET,你健忘了么
我们都晓得,渣滓接纳能够分为Dispose和Finalize两类,关于这二者的区分已太多了,一个是一般的渣滓接纳GC所挪用的办法,别的一个是闭幕器Finalizer,所挪用的办法,在EffectiveC#一书中,有着明白的倡议是说利用IDispose接口来取代Finalize。缘故原由是由于Finalize闭幕会增添渣滓接纳对象的代数,从而影响渣滓接纳。
有了上述的缘故原由,我们如今只来看利用IDispose接口的类。
在.NET中,尽年夜多半的类都是运转在托管的情况下,以是都由GC来卖力接纳,那末我们就不必要完成IDispose接口,而是由GC来主动卖力。但是有一些类利用的长短托管资本,那末这个时分,我们就应当往完成IDispose接口,说个对照经常使用的SqlConnection之类。
写段经常使用的毗连SQL语句的模子:
  1. stringconnectionString=System.Configuration.ConfigurationManager.ConnectionStrings["Study1ConnectionString1"].ConnectionString;SqlConnectionthisConnection=newSqlConnection(connectionString);thisConnection.Open();SqlCommandthisCommand=newSqlCommand();thisCommand.Connection=thisConnection;thisCommand.CommandText="select*from[User]";thisCommand.ExecuteNonQuery();thisConnection.Close();
复制代码
实在,作为非托管资本,为了避免我们健忘挪用Close,一样平常都完成了Finalize,因而,即便我们没有Close失落,也会由闭幕器将这块内存接纳。可是,就增添了这块渣滓的代数。
假定说我们写了如许的代码:
  1. stringconnectionString=System.Configuration.ConfigurationManager.ConnectionStrings["Study1ConnectionString1"].ConnectionString;SqlConnectionthisConnection=newSqlConnection(connectionString);thisConnection.Open();SqlCommandthisCommand=newSqlCommand();thisCommand.Connection=thisConnection;thisCommand.CommandText="select*form[User]";//SQL语句毛病thisCommand.ExecuteNonQuery();thisConnection.Close();
复制代码
如许的话,我们翻开的SqlConnection就没有封闭,只能守候Finalize往封闭了。
这长短常欠好的做法。因而,我们能够想到非常处置:
  1. SqlConnectionthisConnection=null;try{stringconnectionString=System.Configuration.ConfigurationManager.ConnectionStrings["Study1ConnectionString1"].ConnectionString;thisConnection=newSqlConnection(connectionString);thisConnection.Open();SqlCommandthisCommand=newSqlCommand();thisCommand.Connection=thisConnection;thisCommand.CommandText="select*form[User]";thisCommand.ExecuteNonQuery();}finally{if(thisConnection!=null){thisConnection.Close();}}
复制代码
如许做就不错了,可是代码看起来有些丑恶,但是利用using就让代码文雅了良多,这也是C#比JAVA棒良多的中央,呵呵!
  1. stringconnectionString=System.Configuration.ConfigurationManager.ConnectionStrings["Study1ConnectionString1"].ConnectionString;using(SqlConnectionthisConnection=newSqlConnection()){thisConnection.Open();SqlCommandthisCommand=newSqlCommand();thisCommand.Connection=thisConnection;thisCommand.CommandText="select*form[User]";thisCommand.ExecuteNonQuery();}
复制代码
代码量是否是小了良多呢?文雅了很多呢!
实在,在IL的地位,代码仍旧是一样的,他一样把代码给编译成了try-finally的处置情势!
接上去,再来看下我们经常使用的利用数据库的体例:
  1. stringconnectionString=System.Configuration.ConfigurationManager.ConnectionStrings["Study1ConnectionString1"].ConnectionString;SqlConnectionthisConnection=newSqlConnection(connectionString);thisConnection.Open();SqlCommandthisCommand=newSqlCommand();thisCommand.Connection=thisConnection;thisCommand.CommandText="select*from[User]";SqlDataReaderthisReader=thisCommand.ExecuteReader();thisReader.Close();thisConnection.Close();
复制代码
仍是下面的成绩,我们思索用using语句来将之代码重构:
  1. stringconnectionString=System.Configuration.ConfigurationManager.ConnectionStrings["Study1ConnectionString1"].ConnectionString;using(SqlConnectionthisConnection=newSqlConnection(connectionString)){thisConnection.Open();SqlCommandthisCommand=newSqlCommand();thisCommand.Connection=thisConnection;thisCommand.CommandText="select*from[User]";using(SqlDataReaderreader=thisCommand.ExecuteReader()){while(reader.Read()){//操纵}}}
复制代码
我先把这段代码翻译成我们熟习的try-finally的处置情势:
  1. SqlConnectionthisConnection=null;try{stringconnectionString=System.Configuration.ConfigurationManager.ConnectionStrings["Study1ConnectionString1"].ConnectionString;thisConnection=newSqlConnection(connectionString);thisConnection.Open();SqlCommandthisCommand=newSqlCommand();thisCommand.Connection=thisConnection;thisCommand.CommandText="select*from[User]";SqlDataReaderreader=null;try{reader=thisCommand.ExecuteReader();while(reader.Read()){//操纵}}finally{reader.Close();}}finally{thisConnection.Close();}
复制代码
更丑恶的代码吧!以是有个准绳是:只管制止using语句的嵌套。
怎样办理呢?很简单,本人写我们的try-finally吧!
  1. SqlConnectionthisConnection=null;SqlDataReaderreader=null;try{stringconnectionString=System.Configuration.ConfigurationManager.ConnectionStrings["Study1ConnectionString1"].ConnectionString;thisConnection=newSqlConnection(connectionString);thisConnection.Open();SqlCommandthisCommand=newSqlCommand();thisCommand.Connection=thisConnection;thisCommand.CommandText="select*from[User]";reader=thisCommand.ExecuteReader();while(reader.Read()){//操纵}}finally{if(thisConnection!=null){thisConnection.Close();}if(reader!=null){reader.Close();}}
复制代码
如许就行了!
关于using的这节我就写到这,最初对全文做个总结,实在就是一句话:只管利用using来举行非托管资本的资本接纳。
来自:http://www.ckuyun.com/xinyuperfect/archive/2009/03/02/1401409.html
说句实话,net网页编程跨平台根本就不是外行人想想的那种,一次编译,处处运行。
小魔女 该用户已被删除
沙发
发表于 2015-1-21 05:39:46 | 只看该作者
提供基于组件、事件驱动的可编程网络表单,大大简化了编程。还可以用ASP.NET建立网络服务。
简单生活 该用户已被删除
板凳
发表于 2015-1-30 08:56:51 | 只看该作者
可以通过在现有ASP应用程序中逐渐添加ASP.NET功能,随时增强ASP应用程序的功能。ASP.NET是一个已编译的、基于.NET的环境,可以用任何与.NET兼容的语言(包括VisualBasic.NET、C#和JScript.NET.)创作应用程序。另外,任何ASP.NET应用程序都可以使用整个.NETFramework。开发人员可以方便地获得这些技术的优点,其中包括托管的公共语言运行库环境、类型安全、继承等等。
冷月葬花魂 该用户已被删除
地板
发表于 2015-2-3 23:40:08 | 只看该作者
asp.net最主要特性包括:◆编程代码更简洁◆网站可实现的功能更强大◆运行效率高◆节省服务器的动作资源
变相怪杰 该用户已被删除
5#
发表于 2015-2-6 15:07:39 | 只看该作者
在调试JSP代码时,如果程序出错,JSP服务器会返回出错信息,并在浏览器中显示。这时,由于JSP是先被转换成Servlet后再运行的,所以,浏览器中所显示的代码出错的行数并不是JSP源代码的行数。
灵魂腐蚀 该用户已被删除
6#
发表于 2015-2-16 19:01:39 | 只看该作者
主流网站开发语言之CGI:CGI就是公共网关接口(CommonGatewayInterface)的缩写。它是最早被用来建立动态网站的后台技术。这种技术可以使用各种语言来编写后台程序,例如C,C++,Java,Pascal等。
若天明 该用户已被删除
7#
发表于 2015-2-17 15:23:46 | 只看该作者
JSP/Servlet虽然在国内目前的应用并不广泛,但是其前途不可限量。
8#
发表于 2015-2-26 19:56:03 | 只看该作者
同时也感谢博客园给我们这个平台,也感谢博客园的编辑们做成专题引来这么多高人指点。
不帅 该用户已被删除
9#
发表于 2015-3-8 17:09:21 | 只看该作者
对于中小项目来说.net技术是完全可以胜任,但为什么现在大型公司或网站都选择php或java呢?就是因为微软不够开放,没有提供从硬件到应用服务器再到业务应用的整套解决方案。
若相依 该用户已被删除
10#
发表于 2015-3-16 06:43:58 | 只看该作者
但是java靠开源打出的一片天地,特别是在微软的垄断下能打开今天的局面还是有它的生命力的。
活着的死人 该用户已被删除
11#
发表于 2015-3-22 20:54:40 | 只看该作者
ASP在执行的时候,是由IIS调用程序引擎,解释执行嵌在HTML中的ASP代码,最终将结果和原来的HTML一同送往客户端。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2025-1-10 06:10

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表