減少佔用的存儲器我有一個相當大的陣列:由多維變量數組在VBA
Global add_vit(0 To 6, 0 To 6, 2 To 18, 0 To 1300, 0 To 8) As Variant
哪我填部分在模塊一個,子一個填滿,(這需要很長的時間)。我希望只執行一次子模塊。
一旦執行完成,我想要在模塊b,子程序2中訪問上述變量數組,並獨立運行模塊b子程序兩次,以驗證我在模塊b中工作的代碼,sub二。
我知道「全局」部分意味着即使在模塊a完成後,數組也會被填充/保留。這就是我所需要的,但同時,我運行在內存錯誤的邊界上。
我有幾個這樣的數組在運行模塊a,子系統2,它們都是相互連接的,在某些情況下,我需要將特定條目複製到其他特定的數組條目。這也阻止了我將這個最後一個全局數組的計算分解成另一個模塊。
當我在不同的時間運行相同的初始條件下的相同腳本時,我認爲這是因爲可用內存量爲「內存不足」 excel不是靜態的,但依賴於我在筆記本電腦上同時使用的其他進程。
有沒有人有關於如何保持相同數量的條目(雙打和長條),(或雙打和布爾)在存儲可訪問,(約8.000.000),同時仍然能夠訪問它們的建議當初始計算完成時,不需要佔用太多內存,從不同的模塊開始計算*
*如果不手動將它們存儲到excel表單中,這會很繁瑣並且會大幅減慢計算速度。
我也試着將整個陣列下面的腳本計算之前手動復位:
For A = 0 To 6
For B = 0 To 5
For C = 2 To 18
For d = 0 To 1300
For e = 0 To 4
add_vit(A, B, C, d, e) = ""
Next e
For f = 6 To 7
add_vit(A, B, C, d, e) = False
Next f
Next d
Next C
Next B
Next A
重置陣列或內存管理的問題是什麼? – cyboashu
你真的不打算爲內存消耗而打敗陣列。唯一的開銷是[SAFEARRAY]的20個字節(https://msdn.microsoft.com/en-us/library/windows/desktop/ms221482(v = vs.85)。aspx)標題(或64位計算機上的24),每個維度加上8個字節。其餘內存使用僅用於存儲在其中的項目。您需要使用持久性存儲(工作表或其他)或嘗試減少內存需求。 – Comintern
爲什麼它是一個'Variant'數組?它裏面的數據真的是異構的?我這樣說是因爲如果您使用基本數據類型,即「Integer」,您可能能夠減少所需的內存大小。 –