vb.net内存资源释放的简单介绍

vb.net 关闭窗口 内存不能释放

1.如果你释放的是托管托管代码的内存,那么托管代码的内存管理是自动的,.NET可以保证我们的托管程序在结束时全部释放。

让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:域名注册网站空间、营销软件、网站建设、八宿网站维护、网站推广。

2.如果是非托管资源时.NET就不能自动管理了,下面是释放非托管资源内存方法

当我们利用如数据库、文件等非托管资源时,就要用到.NET Framework中的标准: IDisposable接口。按照标准,所有有需要手动释放非托管资源的类都得实现此接口。这个接口只有一个方法,Dispose(),不过有相对的 Guidelines指示如何实现此接口,在这里我向大家说一说。实现IDisposable这个接口的类需要有这样的结构:

[Visual Basic]

Public Class Base

Implements IDisposable

Public Overloads Sub Dispose() Implements IDisposable.Dispose

Me.Dispose(True)

GC.SuppressFinalize(Me)

End Sub

Protected Overloads Overridable Sub Dispose(ByVal disposing As Boolean)

If disposing Then

' 托管类

End If

' 非托管资源释放

End Sub

Protected Overrides Sub Finalize()

Me.Dispose(False)

MyBase.Finalize()

End Sub

End Class

Public Class Derive

Inherits Base

Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)

If disposing Then

' 托管类

End If

' 非托管资源释放

MyBase.Dispose(disposing)

End Sub

End Class

我们要实现Dispose方法,实现这个Dispose方法的几个准则:

它不能扔出任何错误,重复的调用也不能扔出错误。也就是说,如果我已经调用了一个对象的Dispose,当我第二次调用Dispose的时候程序不应该出错,简单地说程序在第二次调用Dispose时不会做任何事。这些可以通过一个flag或多重if判断实现。

一个对象的Dispose要做到释放这个对象的所有资源。拿一个继承类为例,继承类中用到了非托管资源所以它实现了IDisposable接口,如果继承类的基类也用到了非托管资源那么基类也得被释放,基类的资源如何在继承类中释放呢?当然是通过一个virtual/Overridable方法了,这样我们能保证每个Dispose都被调用到。这就是为什么我们的设计有一个virtual/Overridable的Dispose方法。注意我们首先要释放继承类的资源然后再释放基类的资源。

因为非托管资源一定要被保障正确释放所以我们要定义一个Finalizer来避免程序员忘了调用Dispose的情况。上面的设计就采用了这种形式。如果我们手动调用Dispose方法就没有必要再保留Finalizer了,所以在Dispose中我们用了GC.SupressFinalize 将对象从Finalizer表去掉,这样再回收时速度会更快。

那么那个disposing和"托管类"是怎么回事呢?是这样:在"托管类"中写所有你想在调用Dispose时让其处于可释放状态的托管代码。还记得我们说过我们不知道托管代码是什么时候释放的吗?在这里我们只是去掉成员对象的引用让它处于可被回收状态,并不是直接释放内存。在"托管类"中这里我们也要写上所有实现了IDisposable的成员对象,因为他们也有Dispose,所以也需要在对象的Dispose中调用他们的 Dispose,这样才能保证第二个准则。disposing是为了区分Dispose的调用方法,如果我们手动调用那么为了第二个准则"托管类"部分当然得执行,但如果是Finalizer调用的Dispose,这时候对象已经没有任何引用,也就是说对象的成员自然也就不存在了(无引用),也就没有必要执行"托管类"部分了,因为他们已经处于可被回收状态了。好了,这就是IDisposable接口的全部了。现在让我们来回想一下,以前我们可能认为有了 Dispose内存就会马上被释放,这是错误的。只有非托管内存才会被马上释放,托管内存的释放由GC管理,我们不用管。

VB.net 释放资源文件

你也遇到这样的问题,我也是刚解决,下面代码

我的文件在资源中类型为

array

Dim

resources

As

System.Resources.ResourceManager

=

My.Resources.ResourceManager

Dim

b()

As

Byte

=

resources.GetObject("psd文件在资源中的名称")

Dim

s

As

IO.Stream

=

File.Create(Filepath)'要保存的路径

s.Write(b,

0,

b.Length)

s.Close()

VB.NET程序如何巧妙释放内存

set xxx=nothing就是把对象占用的空间释放掉。 其他的局部变量都在栈内存,用完会自动释放的

vb.net 彻底释放内存

我都不敢认你这玩意了,不知是不是要把我2GB的内存变成1GB的,还是说把占用空间清理一些?如果是这样的话,那也真的是有点可怕,万一把正在使用的变量给清了,会不会出错?或者弄得程序发神经,乱搞了?

VB.NET释放资源文件的办法?

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim path As String = "C:\Data.mdb" '文件释放路径

Dim resources As System.Resources.ResourceManager = My.Resources.ResourceManager

Dim b() As Byte = resources.GetObject("Data")

Dim s As IO.Stream

Try

s = IO.File.Create(path)

s.Write(b, 0, b.Length)

s.Close()

MessageBox.Show("资源释放成功")

Catch ex As Exception

MessageBox.Show("资源释放失败!Result=" + ex.Message)

End Try

End Sub

vb.net wmp控件如何释放内存,无法删除正在播放的文件

vb.net有垃圾回收机制,一般不用自己清理内存,对象用完后用dispose方法释放就行了,文件打开状态当然无法删除.


网页名称:vb.net内存资源释放的简单介绍
本文网址:http://scyanting.com/article/dsgsihs.html