原来自己也想过,不过没有试成功,原来是定义的变量太小了!现在看了一篇台湾牛人的文章,才恍然大悟,一语惊醒梦中人呀....
如何释放记忆体
http://www.hosp.ncku.edu.tw/~cww/html/q00117.html
'代码写到Form中,在Form中添加一个按钮,Name=Command1
Private Sub Command1_Click()
Me.Caption = "Begin"
Dim i As Long, s() As Byte
i = CLng(Text1.Text) * 1024 * 1024
ReDim s(i)
Erase s
Me.Caption = "End"
End Sub 还有一个问题,像Win优化大师中的那个内存整理可以显示整理的进度(很多别的内存整理软件也可以做到),可,如果用动态二进制数组,在整理时更改数组的维数,就会越来越慢,如果不用数组(就像上面的代码),操作系统在分配内存时又不能中断,这样又如何做进度呢?希望绿豆兄可以帮忙想一下,麻烦你好多次了,没办法,技不如人,还没学到家......现在怎么好像没看到过暴风雨了?

解决方案 »

  1.   

    up以下,我以前用string,达不到效果,这个用数组好像效果好点
      

  2.   

    这个东西是很阴险的 :D//分配内存时又不能中断,这样又如何做进度呢?提醒一下:可以用类+Collection。
      

  3.   

    //分配内存时又不能中断,这样又如何做进度呢?不能中断,但可以分步!Option ExplicitPrivate Sub Command1_Click()
    Me.Caption = "Begin"
    Dim i As Long, s() As Byte
    i = CLng(Text1.Text) * 1024 * 1024 \ 99
    Dim n As Long
    For n = 1 To 99
    ReDim s(i * n)
    Me.Caption = n & "% Completed"
    Next
    Erase s
    Me.Caption = "End"
    End Sub
      

  4.   

    不行。这样做进度是有了,可速度特慢。
    加上preserve似乎快了一些,不知为何。
      

  5.   

    我在这里曾经吹了一段,你先看看和不和胃口 :)http://expert.csdn.net/Expert/topic/3005/3005514.xml?temp=.620968
      

  6.   

    回复人: pigpag(噼里啪啦 - 毕业考考砸,心情不错) ( ) 这个不是分步……显然其中的重复工作太多了
    '----------------------------------------对,这个办法我想过,如果分成100份不停的重定义数组,会有重复的部分,加了Preserve好像也不行....
      

  7.   

    我想到一个相当龌龊的办法:我不说了,请看吧。-----但是,他是很快的!Private Sub Command1_Click()
    Me.Caption = "Begin"
    Dim i As Long, _
    s0() As Byte, _
    s1() As Byte, _
    s2() As Byte, _
    s3() As Byte, _
    s4() As Byte, _
    s5() As Byte, _
    s6() As Byte, _
    s7() As Byte, _
    s8() As Byte, _
    s9() As Bytei = CLng(Text1.Text) * 1024 * 1024 \ 9Me.Caption = " 0% Completed": ReDim s0(i)
    Me.Caption = "10% Completed": ReDim s1(i)
    Me.Caption = "20% Completed": ReDim s2(i)
    Me.Caption = "30% Completed": ReDim s3(i)
    Me.Caption = "40% Completed": ReDim s4(i)
    Me.Caption = "50% Completed": ReDim s5(i)
    Me.Caption = "60% Completed": ReDim s6(i)
    Me.Caption = "70% Completed": ReDim s7(i)
    Me.Caption = "80% Completed": ReDim s8(i)
    Me.Caption = "90% Completed": ReDim s9(i)Erase s0
    Erase s1
    Erase s2
    Erase s3
    Erase s4
    Erase s5
    Erase s6
    Erase s7
    Erase s8
    Erase s9
    Me.Caption = "End"End Sub
      

  8.   

    昏,又是C++,哎,看来真要把我的C++补一补了,都快还给老师了,VB这东西太害人了,学会了就很不思进取了.....
      

  9.   

    用VB?
    这种操作我认为交给VC会好一点!
      

  10.   

    本来已经睡了,忽然想到了一个好办法,又爬起来。'Form1
    Option Explicit
    Dim C(99) As MemHole
    Dim i As Long, n As LongPrivate Sub Command1_Click()
    i = CLng(Text1.Text) * 10486 ' = 1024 * 1024 / 100
    For n = 0 To 99
    Me.Caption = "Processing " & n & "% ..."
    Set C(n) = New MemHole
    C(n).Alloc i
    Next
    Me.Caption = "Processing 100% ..."
    Erase C
    Me.Caption = "Complete"
    End Sub'Class: MemHole
    Option ExplicitDim S() As BytePublic Sub Alloc(Bytes As Long)
        ReDim S(Bytes)
    End Sub'Private Sub Class_Terminate()
    '    Erase S
    'End Sub'销毁类时自动释放内存,不劳您老人家操心
    '可以看出,Erase C 跟一个一个的Set C = Nothing是等同的
      

  11.   

    up以下,我以前用string,达不到效果,这个用数组好像效果好点VB这东西太害人了,学会了就很不思进取了.....
      

  12.   

    这个准确点不叫内存整理,而叫内存释放,关于内存整理有很大的技巧,关键是释放内存中无用的DLL和相关调用的文件\程序之类,但是内存释放就很简单了,我有一个中文的完全代码,速度极快,但是内存整理不可能这么快了.
      

  13.   

    cso(sjxsoft) 我有一个中文的完全代码,速度极快,但是内存整理不可能这么快了.'---------------------------------------贴出来看看先....
      

  14.   

    现在才知道,结构体中也可以用动态数组。Option Explicit
    Private Type SS
    S() As Byte
    End Type
    Dim C(99) As SS
    Dim i As Long, n As LongPrivate Sub Command1_Click()
    i = CLng(Text1.Text) * 10486 ' = 1024 * 1024 / 100
    For n = 0 To 99
    Me.Caption = "Processing " & n & "% ..."
    ReDim C(n).S(i)
    Next
    Me.Caption = "Processing 100% ..."
    Erase C
    Me.Caption = "Complete"
    End Sub
      

  15.   

    "我有寫過幾封信給某些程式的作者;可是不是沒下文,就使跩的二五八萬後還是不肯講,不然就是騙我我要用一些很低階的API什麼的... "只要有人的地方,就会碰到,丑陋的人类
      

  16.   

    cso(sjxsoft)
    这个准确点不叫内存整理,而叫内存释放,关于内存整理有很大的技巧,关键是释放内存中无用的DLL和相关调用的文件\程序之类,但是内存释放就很简单了,我有一个中文的完全代码,速度极快,但是内存整理不可能这么快了.
    --------------------------------------------------------------
    cso(sjxsoft)有什么高见要拿出来分享一下啊。