|
▼みなさま:
おはようございます。
時間を見つけて色々検証している最中ですが、どうしても
Set XX = Nothing
のタイミングで使用メモリが回復する事がないんですよね…。
>ただ、
>sub test()
> dim aa as object
> set aa=createobject("excel.appliaction")
>・
>・
>・
> set aa=nothing
>end sub
>の Set aa=nothing
>
>をしなかったためのトラブルがあったという投稿を私は
>何回か目にした事はあります。
Access等 でのこの手のオートメーションのトラブルは FAQ だと思うのですが、
大概は Nothing に原因があるのではなく、
Set した変数の扱い方に問題がある場合か、上位オブジェクトからの参照
(ExcelVBA を使われている方には当たり前だと思うのですが、
Application - Workbook - Sheet - Cell という使い方)
ができていない場合が多いのではないかと思います。
Sub test1()
On Error GoTo errEXE
Dim objWrd As Object
Dim objDoc As Object
Set objWrd = CreateObject("Word.Application")
'objWrd.Visible = True
Set objDoc = objWrd.Documents.Open("C:\Test.doc")
objDoc.Characters(1) = "Hello"
objDoc.Characters(6) = "World"
objDoc.Characters(999) = "Miss"
objDoc.Close
objWrd.Quit
errEXE:
Set objDoc = Nothing
Set objWrd = Nothing
End Sub
「C:\Test.doc」というワードファイルを新規で作って上のコードを実行すると
「Miss」の行でエラーになると思います。
On Error で飛ばされた先で「Nothing」があり objWrd は解放されるから大丈夫
かと思いきや、2回目に実行すると読み取り専用になっているかと思われます。
※ 'objWrd.Visible = True のコメントを外すと理由が解ると思います。
CreateObject をした際の後始末に Nothing をしないのがトラブルの原因なのではなく、
Set した変数の扱い方がまずいからトラブルになるのではないでしょうか。
>例えば、
>クラスモジュール(class1)で
こちらも色々やってみたのですが、Nothing する以前の問題で、
Class1 を呼び出した際に使用メモリが増えていますでしょうか?
当方は VB を扱った事もあまりなくこういった分野には全く詳しくないのですが、
メモリ使用量の数値を見ている限りでは、
オブジェクト(よろずやさんの解説によると DLL ?)を呼び出した変数に
Nothing がセットされてからある程度の時間(これが何とも曖昧なんですよね…)
が経つとメモリが回復しているように見えるのですが…。
(という事で Set XX = Nothing でメモリを解放しているわけではない、と言いたいのですが(笑))
|
|