最近在编写代码时应用到了using语句,它能够自动释放语句块内的资源,同样在vb.NET中还提供了多种方法释放资源,接下来对它们进行下总结。
.NET提供了垃圾回收器(Garbage Collector)来自行毁灭物件,它自动释放用来存储不在需要的对象的内存,但内存的释放具有不确定性,而且在不定的时间执行,一旦通用语言运行库(CLR)决定执行垃圾回收,就会释放内存。但是,通常最好尽快释放诸如文件句柄和网络连接这样的有限资源,以减少运行内存。
Dispose方法
在.NET中我们无法选择毁灭物件,但是可以释放器所使用的资源。Dispose()方法提供了对资源的释放,调用该方法可以将制定的对象资源释放。
在对象的释放中有时还涉及到Close()方法,该方法能够关闭所使用的对象,它和Dispose()方法的区别在于一个关闭,一个释放。
如:
Sqlconnection conn=new SqlConnection(“DataSource=LocalHost; Initial Catalog=DataBaseName; UserId=UserName; Password=12345”);
Conn.open();
Conn.close();
Conn.Dispose();
上例中Close只是将数据库链接进行关闭,关闭之后可以重新Open。
Dispose不仅将数据库链接关闭而且将该链接进行清空,清空之后不能重新Open,若想重新Open必须重新赋值。
但是两者并不能销毁SqlConnection对象,即不能释放链接对象在数据库中所占用的资源,而是在某一时间由垃圾回收器自动销毁,回收。
同样Close方法还可以应用在窗体对象的关闭中,如:form1.close()。
using语句
Using语句允许程序员指定使用资源的对象应当合适释放资源。为using语句提供的对象必须实现IDisposable接口。此接口提供了Dispose方法,该方法将释放此对象的资源。
using (SqlConnection conn = new SqlConnection("connection string"))
{
.....
}
在退出{...}代码块后,会自动调用conn的dispose方法,而conn的dispose方法会调用close方法。当然using()括起来的类必须实现IDisposable接口。
相当于:
SqlConnection conn = new SqlConnection("connection string");
try
{
conn.Open();
.....
}
catch(...)
{
....
}
finally
{
conn.Close();
}
有很多时候不知道在何时释放资源适合,用using语句可以等程序执行完自动释放资源。
分享到:
相关推荐
- 析构函数(Destructor)在对象被垃圾回收前执行清理工作,用`Finalize`声明,但VB.NET更推荐使用`Dispose`方法配合`Using`块来释放资源。 9. **事件(Event)与委托(Delegate)** - 事件是对象间通信的一种...
.NET对象生命周期,特别是涉及到垃圾回收(Garbage Collection, GC)的部分,是.NET开发中的关键概念。垃圾回收是一种自动管理内存的技术,它负责监控并回收不再使用的对象所占用的内存,以防止内存泄漏。 在.NET...
10. **垃圾回收**:.NET Framework的自动垃圾回收机制负责管理内存,开发者无需手动释放内存。 通过深入理解和掌握这些知识点,开发者能够更好地利用Visual Basic.NET和Visual C#.NET进行面向对象的程序设计,构建...
Visual Basic.NET(VB.NET)是微软公司推出的一种现代编程语言,它完全支持面向对象的特性,使得开发者能够利用这些特性进行高效、可维护和可重用的组件开发。本篇将深入探讨如何在VB.NET中进行面向对象可重用组件的...
在ASP.NET 2.0中,一切基于对象,核心对象扮演着至关重要的角色,使得开发者能更高效地管理和控制网页的运行流程。 **Page类**是ASP.NET页面的基础,每个ASPX页面都是Page类的实例。Page类提供了大量的属性和方法,...
- **卸载**:页面对象即将被销毁,可以在此阶段释放资源。 此外,页面对象模型还支持事件驱动编程。控件如按钮、链接按钮等,当用户与之交互时,会触发相应的事件。例如,`Button_Click`事件可以用于处理按钮点击...
本篇文章将深入探讨ADO.NET的架构以及其核心组件——Connection对象。 ADO.NET架构主要由几个关键组件构成,包括Connection(数据库连接)、Command(命令对象)、DataAdapter(数据适配器)、DataSet(数据集)和...
本文将深入探讨几种常见的非托管对象释放方法,并结合具体示例进行解析。 #### 一、非托管资源概述 在.NET框架中,内存管理主要分为两种类型:托管资源和非托管资源。托管资源由.NET运行时(CLR)通过垃圾回收机制...
- **Page.Dispose()**:此方法用于释放Page对象占用的资源,在页面生命周期结束前被调用。 - **Page.FindControl(string id)**:此方法用于根据ID查找页面上的控件。 - **Page.Init**:此事件发生在页面初始化阶段,...
在.NET Core中,对象池是一种优化性能的技术,尤其适用于创建和销毁对象代价高昂的情况。对象池的基本思想是重用已创建的对象,而不是每次都创建新的实例,从而减少内存分配和垃圾回收的压力。这篇文档主要介绍了...
总结一下,解决.NET `BitmapImage`内存释放问题的关键点包括: 1. 使用`FileStream`代替`MemoryStream`以减少内存占用。 2. 设置`DecodePixelWidth`或`DecodePixelHeight`以限制解码的图像大小。 3. 设置`...
- 析构函数:释放对象资源前调用的方法,用`Finalize`关键字声明。.NET框架提供垃圾回收机制,通常不需要手动管理内存。 6. 泛型 - 泛型允许在编译时提供类型安全性,提高代码效率。VB.NET支持泛型类、接口和方法...
析构函数是对象被销毁前调用的特殊方法,VB.NET使用`Finalize`关键字,但通常推荐使用`IDisposable`接口和`Using`语句来处理资源释放。 7. 抽象类与密封类: 抽象类不能被实例化,通常作为其他类的基类,包含抽象...
虽然`GC.Collect()`不是必需的,因为.NET框架的垃圾收集机制通常会在适当的时候自动回收不再使用的对象,但在这种情况下,由于Excel进程可能持有应用程序的引用,因此主动调用`GC.Collect()`有助于确保进程立即关闭...
GC 判断一个对象是否可以被释放是通过从被称为 Root 对象集中的根对象开始(如 Main 函数的 args 形参、static 变量及其对象成员等),遍历出所有被其引用的对象和子对象。GC 执行时通过标记这些引用中的对象,清除...
由于.NET的垃圾回收机制,通常不需要手动释放资源,因为垃圾收集器会在不再有引用指向对象时自动清理。然而,在某些特定情况下,如内存紧张或者资源占用过多,可能需要手动释放资源。VB.NET不直接支持显式释放`...
本文将深入探讨ADO.NET中的五大核心对象:Connection、Command、DataReader、DataSet和DataAdapter,帮助开发者更好地理解和使用这些对象进行数据操作。 1. **Connection对象**: Connection对象是ADO.NET中的基础...
.NET内存回收机制是.NET框架核心组成部分之一,主要负责管理应用程序的内存分配和释放,从而避免内存泄漏问题。这一机制由垃圾回收器(Garbage Collector,简称GC)执行,使得程序员无需手动管理内存,提高了开发...
### ASP.NET中的FILESTREAM对象总结 #### 一、概述 在ASP.NET开发中,`FileStream`对象是一个非常实用且强大的工具,它主要用于处理文件的读写操作。与`File`对象相比,`FileStream`提供了更高级别的接口,使得...