C#开发中的垃圾回收机制简析

2019-12-30 10:57:44于海丽

C#开发中的垃圾回收机制简析

.net中超过80%的资源都是托管资源。

非托管资源:

ApplicationContext,Brush,Component,ComponentDesigner,Container,Context,

Cursor,FileStream,Font,Icon,Image,Matrix,Object,OdbcDataReader,OleDBDataReader,

Pen,Regex,Socket,StreamWriter,Timer,Tooltip ,文件句柄,GDI资源,数据库连接等等资源。可能在使用的时候很多都没有注意到!

.NET的GC机制有这样两个问题:

首先,GC并不是能释放所有的资源。它不能自动释放非托管资源。

第二,GC并不是实时性的,这将会造成系统性能上的瓶颈和不确定性。

GC并不是实时性的,这会造成系统性能上的瓶颈和不确定性。所以有了IDisposable接口,IDisposable接口定义了Dispose方法,这个方法用来供程序员显式调用以释放非托管资源。使用using 语句可以简化资源管理。

示例

?
  1. /// <summary>     /// 执行SQL语句,返回影响的记录数   
  2.  /// </summary>     /// <param name="SQLString">SQL语句</param>   
  3.  /// <returns>影响的记录数</returns>     public static int ExecuteSql(string SQLString)   
  4.  {     using (SqlConnection connection = new SqlConnection(connectionString))   
  5. {     using (SqlCommand cmd = new SqlCommand(SQLString, connection))   
  6.  {     try 
  7.  {    connection.Open();   
  8. int rows = cmd.ExecuteNonQuery();     return rows;   
  9.  }     catch (System.Data.SqlClient.SqlException e)