私の質問にはすでに回答がありましたが、事前に申し訳ありませんが、数日前から検索しています。Excel VBA - populatingバリアント配列がメモリ使用量を増やす
バリアントの配置中にメモリが絶えず消費されるという問題があります。配列の大きさは、最初の大きさになると、メモリ消費量がどのくらい増えるのかが分かります。私は、コードの小片は言葉よりも良いそれを説明すると思います。このコードで
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倍の16倍の倍数の列があります。配列が宣言されているときは、タスクマネージャで+160MBを参照してください。しかし、実行中にメモリ使用量が増えると、別の400 Mbがあるので、そのアレイサイズで合計660 Mbになりますか?そして、配列を倍精度で満たすとき、なぜメモリ消費は増加しないのですか?私は提案されたトピックを見ましたが、私は読んでリンク、ありがとう。 – Den