Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


52964 / 76736 ←次へ | 前へ→

【28597】Re:メモリ使用量 補足2
発言  ichinose  - 05/9/9(金) 17:20 -

引用なし
パスワード
   みなさん、こんにちは。

>
>時間を見つけて色々検証している最中ですが、どうしても
>
>Set XX = Nothing
>
>のタイミングで使用メモリが回復する事がないんですよね…。
>
>当方は VB を扱った事もあまりなくこういった分野には全く詳しくないのですが、

私もExcelのメモリー管理がわかっているわけではありません。
いえ、Windowsのそれについてもです・・・。

私の主張は
あくまでも

>オブジェクトとは、データとプログラムをカプセル化したものですよね?

>だとしたら、

>>「Set xx = Nothing で メモリを解放している訳ではない」

>これは、必ずしも正しくはないと思いますよ!!

これなんです。
つまり、オブジェクトの作り方(クラスの中身)によっては

Set aa=Nothing

で発生するイベントに何らかの処理が施されていれば
メモリが解放されることもありえるということです。

私も色々とクラスに変数を入れて試しましたが、

例えば、こんなクラス

'=================================
Public myarray As Variant
'=================================
Sub set_data()
  Dim temp() As Variant
  For idx = 1 To 10000
   ReDim Preserve temp(1 To idx)
   temp(idx) = String(1000, "a")
   Next
  myarray = temp()
  Erase temp()
End Sub
'==================================
Private Sub Class_Terminate()
  On Error Resume Next
  Debug.Print "term message1 " & TypeName(myarray)
End Sub

但し、Application.MemoryUsedに反映されません。
これは、変数のありかとApplication.MemoryUsedで計測されるメモリとで
に何か違いがあるのでしょうかねえ??
わかりません。


でクラスの内容を変えました。


以下の仕様で試してみて下さい。


クラスモジュール(Class1)では、インスタンスの作成で
予め作成されているブック(clssbk.xls)を呼び出す事を考えます。
適当にデータを入れたブックをclssbk.xlsとして保存しておいてください。


クラスモジュール Class1は、

'==================================================
Public readbk As Workbook
'=================================================
Private Sub Class_Initialize()
  Set readbk = Workbooks.Open(ThisWorkbook.Path & "\clssbk.xls")
End Sub
'=============================================================
Private Sub Class_Terminate()
  On Error Resume Next
  readbk.Close False
  Set readbk = Nothing
End Sub


標準モジュールに
'===============================================================
Dim cls As Class1
'==============================================================
Sub test()
  With Application
   Debug.Print "chk1--" & .MemoryUsed & "---" & .MemoryFree & "---" & .MemoryTotal
   End With
  Set cls = New Class1
  DoEvents
  With Application
   Debug.Print "chk2--" & .MemoryUsed & "---" & .MemoryFree & "---" & .MemoryTotal
   End With
  Set cls = Nothing
  DoEvents
  With Application
   Debug.Print "chk3--" & .MemoryUsed & "---" & .MemoryFree & "---" & .MemoryTotal
   End With
End Sub

として、「clssbk.xls」と同じ場所に保存して下さい。

保存後、プロシジャーtestを実行してみて下さい。
今度は、使用メモリに違いあると思います。

つまり、

Set Cls=Nothing

によるメモリ解放が認められます。

というように
オブジェクトの中身によって、

Set xx = Nothing の影響は未知数である


というのが私の青年の主張でした・・。
0 hits

【28395】メモリ使用量 EXCEL_VBA中の下 05/9/5(月) 14:34 質問
【28396】Re:メモリ使用量 ちくたく 05/9/5(月) 14:53 発言
【28400】Re:メモリ使用量 小僧 05/9/5(月) 16:16 発言
【28401】Re:メモリ使用量 EXCEL_VBA中の下 05/9/5(月) 16:37 発言
【28403】Re:メモリ使用量 小僧 05/9/5(月) 17:39 発言
【28415】Re:メモリ使用量 ichinose 05/9/6(火) 7:59 発言
【28427】Re:メモリ使用量 EXCEL_VBA中の下 05/9/6(火) 14:41 発言
【28447】Re:メモリ使用量 実験1 ichinose 05/9/6(火) 20:28 発言
【28448】Re:メモリ使用量 実験2 ichinose 05/9/6(火) 20:49 発言
【28451】Re:メモリ使用量 補足 ichinose 05/9/7(水) 6:56 発言
【28452】Re:メモリ使用量 補足2 ichinose 05/9/7(水) 8:06 発言
【28453】Re:メモリ使用量 補足2 ちくたく 05/9/7(水) 8:47 回答
【28488】Re:メモリ使用量 補足2 よろずや 05/9/7(水) 22:33 発言
【28499】Re:メモリ使用量 補足2 ichinose 05/9/8(木) 8:32 発言
【28537】Re:メモリ使用量 補足2 よろずや 05/9/8(木) 19:29 発言
【28541】Re:メモリ使用量 補足2 小僧 05/9/8(木) 22:18 質問
【28542】Re:メモリ使用量 補足2 よろずや 05/9/8(木) 22:49 発言
【28544】Re:メモリ使用量 補足2 小僧 05/9/9(金) 0:12 質問
【28545】Re:メモリ使用量 補足2 ichinose 05/9/9(金) 1:36 発言
【28555】Re:メモリ使用量 補足2 小僧 05/9/9(金) 10:39 質問
【28570】Re:メモリ使用量 補足2 よろずや 05/9/9(金) 12:59 発言
【28597】Re:メモリ使用量 補足2 ichinose 05/9/9(金) 17:20 発言
【28598】Re:メモリ使用量 補足2 小僧 05/9/9(金) 17:47 お礼
【28402】Re:メモリ使用量 ちくたく 05/9/5(月) 16:51 発言

52964 / 76736 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free