关于.net 内存释放!
各位好,在一个循环中有一个函数的返回值是以下结构:.net vb 图形 --------------------编程问答-------------------- 不排除BaseImgRet内部有bug导致内存泄漏,你这么写没问题。 --------------------编程问答-------------------- 但是,如果BaseImgRet 内存能释放,那理论上内存的占用也应该降低下来,可是执行完后程序所占用的内存没有变化。 --------------------编程问答-------------------- 谁跟你说Dispose是释放内存的意思? --------------------编程问答-------------------- 那应该怎么写让程序可以立即释放呢,谢谢! --------------------编程问答-------------------- 如果每
Private Structure BaseImgRet
'用于基本图形处理结果返回
Dim BaseBmp As Bitmap
Dim ErrInfo As String
End Structure
如以下应用代码:
For i = 1 To 100
Dim ret As BaseImgRet= aa() '例如aa的功能函数的是返回这个类型的结果
'对Ret进行处理代码
'释放占用内存
ret.basebmp.Dispose()
ret.Errinfo = Nothing
'问题,在执行了以上释放代码后,没见程序占用内存降下来,而且重复的循环,占用的内存不断的增长
'请问要如何解决这个问题,谢谢!
Next i
Dispose之后都调用GC.Collect()来释放,是呼会影响程序的执行速度! --------------------编程问答-------------------- 除 --------------------编程问答-------------------- Dispose之后都调用GC.Collect()也不会回收。
Dispose 是释放 非托管资源。
GC.Collect()是 释放托管资源,你的托管资源还有引用呢,怎么能释放。 --------------------编程问答--------------------
Dim ret As BaseImgRet= aa() '例如aa的功能函数的是返回这个类型的结果
将这句拆分开,声明放在循环外。赋值放在循环里。 --------------------编程问答-------------------- 设定为Nothing之后就可以用GC回收。
一般都不这样做,系统会在最优化的情况下回收。 --------------------编程问答-------------------- using
end using --------------------编程问答-------------------- using
end using --------------------编程问答-------------------- 稍为改一下
Dim ret As BaseImgRet
For i = 1 To 100
ret= aa()
ret.basebmp.Dispose()
ret.Errinfo = Nothing
ret=nothing
Next i
GC.Collect()
补充:.NET技术 , VB.NET