提高系统性能

使用using释放资源

(1)using用来释放一个对象占用的重要资源,不仅仅包括数据库对象,还有文件读写对象等;

(2)使用using语法的对象都需要实现IDisable接口的Dispose()方法。

该方法专门用来释放对象占用的重要资源。

(3)Dispose()方法封装了对Close()方法的调用。

What is the resource ?

资源是实现 System.IDisposable 的类或结构,它包含名为 Dispose 的单个无参数方法 正在使用资源的代码可以调用 Dispose 以指示不再需要该资源。如果不调用 Dispose,则最终将因为垃圾回收而发生自动处置。

如果资源获取的形式是局部变量声明,那么此局部变量声明的类型必须为System.IDisposable 或是可以隐式转换为 System.IDisposable 的类型。如果资源获取的形式是表达式,那么此表达式必须是 System.IDisposable 或是可以隐式转换为 System.IDisposable 的类型。

在资源获取中声明的局部变量必须是只读的,且必须包含一个初始值设定项。

using 语句被翻译成三个部分:获取、使用和处置。资源的使用隐式封闭在包含一个 finally 子句的 try语句中。此 finally 子句处置资源。如果获取了 null 资源,则不进行对 Dispose 的调用,也不引发任何异常。

例如,下列形式的 using 语句

using (R r1 = new R()) {
r1.F();
}
完全等效于

R r1 = new R();
try {
r1.F();
}
finally {
if (r1 != null) ((IDisposable)r1).Dispose();
}

Using的两个作用:

作用1:导入命名空间

作用2:释放对象占用的资源,如Connection,DataReader,FileStream

Using引起来的对象的作用域只在花括号,出了{}就不再起作用了。

Dispose:

.close()和dispose()区别?

close()只是关闭连接,但是通道没有销毁,dispose()不仅把连接给关闭了,而且把通道也给销毁了。

Dispose方法会自动调用Close()

要想让一个类型可以通过using管理,该类型或者父类必须实现了IDisposable接口。

using(SqlConnection con=new SqlConnection)

{

//本质上自动调用了Dispose方法

}

什么样的的语句可以使用using管理??

稀缺的资源,才需要using管理。

 using语句方法

它常见于非托管资源(也就是在C++编程里面可能碰到的句柄和设备上下文),这些资源使用完毕后,是必须释放的。在C#里面,由于完全的面向对象编程,这些资源类型都实现了IDisposable接口,因此会使用在捕获异常try...catch语句的finally块中释放资源,代码如下:

  1. {
  2. Font font1 = new Font("Arial", 10.0f);
  3. try
  4. {
  5. byte charset = font1.GdiCharSet;
  6. }
  7. finally
  8. {
  9. if (font1 != null)
  10. ((IDisposable)font1).Dispose();
  11. }
  12. }

这样确保调用Dispose,从而保证释放资源。(请注意,使用额外的大括号为对象创建有效的范围而此时如果使用using语句,同样能够获得相同的结果,代码如下:

  1. using (Font font3 = new Font("Arial", 10.0f), font4 = new Font("Arial", 10.0f))
  2. {
  3. // Use font3 and font4.
  4. }

using语句按照正确的方式调用对象上的Dispose方法,并(在您按照前面所示方式使用它时)会导致在调用 Dispose 时对象自身处于范围之外。在using块中,对象是只读的并且无法进行修改或重新分配。

同时还要注意的一点是:

按照规则,当使用IDisposable对象时,应在using语句中声明和实例化此对象。虽然可以在using语句外实例化资源对象,代码如下:

  1. Font font2 = new Font("Arial", 10.0f);
  2. using (font2) // not recommended
  3. {
  4. // use font2
  5. }
  6. // font2 is still in scope
  7. // but the method call throws an exception
  8. float f = font2.GetHeight();

在这种情况下,该对象将在控制权离开 using 块之后保持在范围内,即使它可能将不再具有对其非托管资源的访问权也是如此。换句话说,再也不能完全初始化该对象。如果试图在 using 块外部使用该对象,则可能导致引发异常,如上述代码段3中的font2.GetHeight()调用而产生异常。由于这个原因,通常最好是在 using 语句中实例化该对象并将其范围限制在 using 块中。

时间: 2024-08-28 18:01:41

提高系统性能的相关文章

提高系统性能数据库设计的横向分割和纵向分割技术

本文介绍一些关于提高系统性能方面的知识,列分割,行分割,实例分割,物理存储分割等技术. 这篇主要讲解一下数据库的设计,因为一个好的数据结构,对整体系统的运作太重要了,请看看本文的内容. 提到程序性能,大家都知道时间复杂度的公式O(f(n)).在提高性能的这个迷局中,很多人都会想尽办法降低算法函数f的复杂度,或者是提高函数f的运行 速度.但是这些都是没有办法的办法,是舍本求末的办法.如果基数n巨大,这类方法都不会有很好的效果,因为问题的本身在于基数 n.千方百计减少基数n的数量才能获取质的提高.

Hibernate 利用缓存(一级、二级、查询)提高系统性能

在hibernate中我们最常用的有三类缓存,分别为一级缓存.二级缓存和查询缓存,下面我们对这三个缓存在项目中的使用以及优缺点分析一下. 缓存它的作用在于提高性能系统性能,介于应用系统与数据库之间而存在于内存或磁盘上的数据. 首先,来看一下一级缓存它默认开启且很常用. 一级缓存 同是一种缓存常常可以有好几个名字,这是从不同的角度考虑的结果,从缓存的生命周期角度来看一级缓存又可以叫做:sessin缓存.线程级缓存.事务级缓存.我们编程中线程.事务.session这三个概念是绑定到一起的放到了thr

避免云中断和提高系统性能的4种方法

避免云中断和提高系统性能的4种方法 当大多数人听到关于云计算中断的头条新闻时,他们通常考虑的是哪个云计算供应商,或其负面宣传将如何影响股票价格,却很少有人会想到事件背后的相关人员,也就是负责修复问题并让客户系统恢复运行的工作人员. 尽管他们付出了最大的努力,偶尔的业务中断或停电是不可避免的.互联网是一个不稳定的场所,没有人能够完全免于这种危险.幸运的是,企业可以采取一些简单的措施来防范意外停机的可能性. 以下是避免云计算中断的四种方法,同时提高了流程中的安全性和性能: 1.采用多个地点或多云环境

提高系统性能和安全性

using 定义:using可以用于导入命名空间,也可以释放对象占用的内存资源. 语法: using(SqlConnection conn = new SqlConnection(connString)) { //数据库操作代码 } using语句允许用户定义一个范围,并且总是在范围末尾处释放对象. 即使using范围内出现异常也会释放对象. 注意事项: 1.using可以主动释放的对象都需要事项IDisable接口. 2.并不是所有的代码需要使用using,只需要对那些对系统性能有重要影响的对

提高系统性能——对SQL语句优化的思考

软件在研发的过程中自始至终都在留意着系统的可扩展性.但与此同一时候也在关注着系统的性能,SQL语句作为系统性能的一环不容忽视.从今天開始结合开发的经验,谈一下我对SQL语句优化的理解和认知: 1.在联合查询语句中做到小表驱动大表: 联合查询是经常使用到的一种查询方式,左连接.右连接.内连接等等时不时地被应用在查询语句中,然而在这一过程中假设能判明各表的数据量,那就再好只是了,在这样的情况下from后面应该紧跟数据量小的表.为什么?呵呵呵,比方a表有1000条数据,b表有20条数据.使用左连接进行

第三章:提高系统性能:从数据访问开始

使用using释放资源 SqlConnection conn = new SqlConnection (connString); try { conn.Open(); //省略访问数据库代码... } catch (Exception ex) { throw ex; } finally { conn.Close(); } 数据库连接通常属于有限的服务器资源,因此要在使用后马上关闭.这是提高数据 库访问性能的基本方法.在代码中,finally块中调用Close()方法释放连接,确保 即使有异常发生

提高系统性能之多线程编程

多线程编程技术在实际编程应用中十分广泛,多线程技术的应用通过提高CPU的利用率来帮助系统提升性能,那么究竟多线程编程在什么情况下使用?怎样使用多线程呢?多线程的应用一定要适应特定的环境,线程开多了会大大增加Cpu的负担,而线程数目开少了又很难提高cpu的利用率,为此我们使用线程池来管理线程.线程池用来限制线程的数量,减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务,同时可以根据系统的承受能力,调整线程池中工作线线程的数目,防止因为消耗过多的内存使得服务器宕机.那究竟什么是

使用redis减小数据库访问压力及提高系统性能

什么是redis redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set --有序集合)和hash(哈希类型).这些数据类型都支持push/pop.add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的.在此基础上,redis支持各种不同方式的排序.与memcached一样,为了保证效率,数据都是缓存在内存中.区别的是redis会

老机器软升级,提高系统性能

首先,升级一下内存,8G以上最好: 然后,下载一个super speed的内存硬盘映射工具,从内存中拿出来1-2GB做缓冲硬盘,比方叫H盘,类似SSD吧,可是比SSD更快. 接着,把photoshop的暂时文件文件夹.系统的暂时文件文件夹(环境变量中改动).迅雷下载文件夹.浏览器的缓存文件夹(如Chrome)所有在内存硬盘上新建一个文件夹进行文件保存.  !!须要注意的是,Chrome的UserData文件夹下有你的浏览器的所有信息,删除前请同步到你的google账户中. 首先找到Chrome浏

优化Linux下的内核TCP参数以提高系统性能

内核的优化跟服务器的优化一样,本着稳定安全的原则.下面以64位的CentOS 5.5下的Squid服务器为例来说明,待客户端与服务器端建立TCP/IP连接后就会关闭SOCKET,服务器端连接的端口状态也就变为TIME_WAIT了.那是不是所有执行主动关闭的SOCKET都会进入TIME_WAIT状态呢?有没有什么情况使主动关闭的SOCKET直接进入CLOSED状态呢?答案是主动关闭的一方在发送最后一个ACK后就会进入TIME_WAIT状态,并停留2MSL(MaxSegment LifeTime)时