【编程技术】求高手看看如下的VBA代码,目前总是error,说 out of memory
登录 | 论坛导航 -> 华新鲜事 -> 技术の宅 | 本帖共有 6 楼,分 1 页, 当前显示第 1 页 : 本帖树形列表 : 刷新 : 返回上一页
<<始页  [1]  末页>>
作者:mydreamsg (等级:2 - 初出茅庐,发帖:57) 发表:2015-05-12 19:06:42  楼主  关注此帖
【编程技术】求高手看看如下的VBA代码,目前总是error,说 out of memory

我有如下的代码,总是提示提示 out of memory,求高手优化一下

 

Function Sparsekv(kv() As Double, ByRef KVD() As Double, ByRef kvsi() As Long, ByVal neq As Long, ByVal nband As Long) As Long

Dim i As Long, j As Long, k As Long, L As Long, n As Long, NumRows As Long, NumNon0 As Long, LB As Long, KVD2() As Double, KVsi2() As Long

Dim MaxRows As Long, IndexA() As Long


    LB = LBound(kv)

    NumRows = UBound(kv) - LB + 1

 

    For i = LB To NumRows + LB - 1

        If kv(i) <> 0 Then NumNon0 = NumNon0 + 1

    Next i

    MaxRows = neq * (nband + 1) - 1

 

 

    ReDim KVD(0 To NumNon0 - 1)

    ReDim kvsi(0 To NumNon0 - 1, 0 To 1)

    ReDim KVD2(0 To MaxRows)                  

    ReDim KVsi2(0 To MaxRows, 0 To 1)          '在这行总是提示out of memory

    ReDim IndexA(0 To neq, 0 To nband + 1)      '有时候是在这行提示 提示out of memory

  

    i = 1

    n = 0

    k = -1

    For j = 1 To nband + 1

 

        n = (j - 1) * (neq)

        For i = 1 To neq - j + 1

            If kv(n + i) <> 0 Then

                k = k + 1

                'L = (i - 1) * nband + k

                KVD2(k) = kv(n + i)

                KVsi2(k, 0) = i - 1

                KVsi2(k, 1) = i + j - 2

                IndexA(i - 1, 0) = IndexA(i - 1, 0) + 1

                IndexA(i - 1, IndexA(i - 1, 0)) = k

            End If

        Next i

    Next j

 

    k = 0

    For i = 0 To neq

        For j = 1 To IndexA(i, 0)

            n = IndexA(i, j)

            KVD(k) = KVD2(n)

            kvsi(k, 0) = KVsi2(n, 0)

            kvsi(k, 1) = KVsi2(n, 1)

            k = k + 1

        Next j

    Next i

 

End Function

 

我查看了一下 :

 

NumNon0=93214
MaxRows=50380469
neq=7959
nband=6329
欢迎来到华新中文网,踊跃发帖是支持我们的最好方法!原文 / 传统版 / WAP版只看此人从这里展开收起列表
作者:赶超美日 (等级:5 - 略有小成,发帖:2267) 发表:2015-05-12 19:20:45  2楼
二维数组太大了,50Mx 2x8=800M Byte
[本文发送自华新手机Wap版]
欢迎来到华新中文网,踊跃发帖是支持我们的最好方法!原文 / 传统版 / WAP版只看此人从这里展开收起列表
作者:mydreamsg (等级:2 - 初出茅庐,发帖:57) 发表:2015-05-12 19:29:38  3楼
有什么解决办法没有啊?
欢迎来到华新中文网,踊跃发帖是支持我们的最好方法!原文 / 传统版 / WAP版只看此人从这里展开收起列表
作者:赶超美日 (等级:5 - 略有小成,发帖:2267) 发表:2015-05-12 19:47:16  4楼
有什么解决办法没有啊?
试试定义两个array:kvsi20和kvsi21. 不要二维数组kvsi2. 换一个memory大的机器。
[本文发送自华新手机Wap版]
欢迎来到华新中文网,踊跃发帖是支持我们的最好方法!原文 / 传统版 / WAP版只看此人从这里展开收起列表
作者:功夫熊猫 (等级:?? - 无法无天,发帖:73477) 发表:2015-05-12 19:57:54  5楼
楼主不如谈谈想实现什么... 说不定可以少用些 FOR
欢迎来到华新中文网,踊跃发帖是支持我们的最好方法!原文 / 传统版 / WAP版只看此人从这里展开收起列表
作者:mydreamsg (等级:2 - 初出茅庐,发帖:57) 发表:2015-05-12 20:04:06  6楼
,谢谢你的建议
欢迎来到华新中文网,踊跃发帖是支持我们的最好方法!原文 / 传统版 / WAP版只看此人从这里展开收起列表
论坛导航 -> 华新鲜事 -> 技术の宅 | 返回上一页 | 本主题共有 6 篇文章,分 1 页, 当前显示第 1 页 | 回到顶部
<<始页  [1]  末页>>

请登录后回复:帐号   密码