我是新來的,如果我的問題已經被回答,提前抱歉,但我現在搜索了幾天,發現沒有解決方案或解釋呢。Excel VBA - 填充Variant數組增加內存使用量
問題是,在一個變種陣列的人口中,內存消耗不斷增加。該陣列的尺寸是,並且當它是第一個尺寸時,我可以看到內存消耗如何增加相應的量。我認爲,一小塊的代碼將更好地解釋它比文字:
Sub test()
Dim Arr(1 To 1000000, 1 To 10) As Variant
Dim i As Long, j As Integer
For i = 1 To 1000000
For j = 1 To 10
Arr(i, j) = "AAAAAAAAA"
Next j
Next i
End Sub
我這段代碼的經驗是 - 陣列標註內存利弊之後。增加約。 160 MB(即10 * 1 000 000 * 16)。執行完成後,我已經增加了大約400 MB!有趣的是 - 如果用一個數字替換字符串AAAA,這個問題就消失了。
在實際的程序(這只是一個測試代碼)我有一個更大的數組約。 600 MB,但在代碼執行結束時,內存使用量爲3.4 GB!結果是「內存不足」錯誤。
任何人都可以解釋一下嗎?
由於提前, 書齋
爲什麼你覺得奇怪的是,當你把一個數組中的字符串,用來存儲該數組的內存增加?字符串本身不存儲在變量變量的內存中。無論如何,Excel VBA可能是這種規模數據的錯誤工具。也許使用像R這樣的東西(如果你想保留某個前端,可以與Excel進行交互)可能是一個很好的戰略舉措。 –
以下內容可能會幫助您理解爲什麼使用大型變體陣列來存儲大量字符串會使用如此多的內存:http://bytecomb.com/vba-internals-whats-in-a-variable/ –
我很善良必須爲這項任務而努力。我沒有預料到內存消耗會增長,因爲我聲明瞭這個數組,所以我期待它會保留必要的內存,這是16字節,用於不同時間的列時間行,在這種情況下是160 MB,我可以在聲明數組時,請參閱任務管理器中的+160 MB。但是在執行期間,內存使用量會增加,直到我有另外的400 Mb,那麼對於那個數組大小,總共660 Mb?當爲陣列填充雙打時,爲什麼內存消耗不會增加?我看到了提議的主題,但我會閱讀的鏈接,謝謝。 – Den