当前位置:编程学习 > C#/ASP.NET >>

关于.net 内存释放!

各位好,在一个循环中有一个函数的返回值是以下结构:

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
.net vb 图形 --------------------编程问答-------------------- 不排除BaseImgRet内部有bug导致内存泄漏,你这么写没问题。 --------------------编程问答-------------------- 但是,如果BaseImgRet 内存能释放,那理论上内存的占用也应该降低下来,可是执行完后程序所占用的内存没有变化。 --------------------编程问答-------------------- 谁跟你说Dispose是释放内存的意思? --------------------编程问答-------------------- 那应该怎么写让程序可以立即释放呢,谢谢! --------------------编程问答-------------------- 如果每
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
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,