我都不敢认你这玩意了,不知是不是要把我2GB的内存变成1GB的,还是说把占用空间清理一些?如果是这样的话,那也真的是有点可怕,万一把正在使用的变量给清了,会不会出错?或者弄得程序发神经,乱搞了?
成都创新互联专注于六合企业网站建设,响应式网站开发,购物商城网站建设。六合网站建设公司,为六合等地区提供建站服务。全流程专业公司,专业设计,全程项目跟踪,成都创新互联专业和态度为您提供的服务
vb.net有垃圾回收机制,一般不用自己清理内存,对象用完后用dispose方法释放就行了,文件打开状态当然无法删除.
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
释放内存一般指存储在内存里的变量、数组、运行代码存储空间的释放。这里其实需要分2种情况。一种是数组、变量和代码的存储空间都是在程序运行完成后由操作系统自动进行内存的回收,也就是自动释放了内存,详细的可看看以下vb语言对变量存活期的说明。另一种是在程序过程中某些数组内存后续过程不再使用了,而特别使用代码将数组内存直接释放的情况,例如ERASE语句。
一、变量的存活期
变量保留其值的这段时间,称为生存周期。变量的值可能在整个生存周期都在改变,但它仍然保留着一些值。当变量失去了范围之后,它也就不再保存着任一个值。
当过程开始运行时,所有的变量都会被初始化。一个数值变量会初始化成
0,变长字符串被初始化成零长度的字符串 (""),而定长字符串会被填满 ASCII 字符码 0 所表示的字符或是 Chr(0)。Variant变量会被初始化成 Empty。用户定义类型中每一个元素变量会被当成个别变量来做初始化。
当声明一个对象变量时,内存中虽有保留空间,但它的值会被设置成
Nothing,直到利用 Set 语句对它指定一个对象引用。
如果在代码的运行期间,变量的值一直没有改变,则它会继续保有它的初始值直到它丢失范围为止。
Dim 语句声明过程的级别变量将保留一个值,直到此过程退出为止。如果该过程调用其它的过程,则在这些过程正在运行的同时,属于调用者过程的变量也保留它的值。
如果过程的级别变量是用 Static 关键字来声明的,则只要代码正在任何模块中运行此变量仍会保留它的值。而当所有的代码都完成运行后,变量会失去它的范围和它的值。所以它的存活期和模块级别的变量是一样的。
模块级别的变量与静态变量是不同的。在标准模块或类模块中变量会保留它的值,直到停止运行代码。在对象类模块中,只要仍有一个属于此对象类的实例存在,则变量会一直保留它的值。模块级别的变量会一直占用内存资源,直到重新设置它们的值,所以只有在必要时才使用它们。
如果在 Sub 或 Function 语句前加上 Static 关键字,则在此过程中所有过程级别的变量的值被保留在调用期间。
二、erase语句:
set xxx=nothing就是把对象占用的空间释放掉。 其他的局部变量都在栈内存,用完会自动释放的
.net 有自己的资源回收机制GC。
如果变量不再使用了,所有引用该变量的其它变量也都没用了(dispose或者赋值为空了),那么这些没用的变量会定时的被GC自动回收,不需要自己去管理。
如果非要自己释放资源的话,可以使用 GC.Collect() 进行释放,但是并不能保证一次GC.Collect()就可以释放掉所有没有用的资源,可能要经过好几轮GC.Collect()才能释放干净。
所以还是建议不要手动回收了,让系统根据要求自动回收吧。