- PR -

やっぱりわからないGCの動作

1
投稿者投稿内容
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2002-12-05 18:14
 ガベージコレクションは明示的に呼び出せないのでしょうか?

 OLEからExcelを起動します。このExcelを非表示にしてマクロを使ってワークシートを作成します。シートを保存してExcelを終了します。このとき、Windowsのメモリ上にはExcelが残ります。

dim exapp as Excel.Application = CreateObject("Excel.Application")
excel操作省略
exapp.Visible = True
exapp.ScreenUpdating = True
exapp.Quit
exapp = Nothing

最後にCreateObjectで作成したメモリへの参照にNothingを入れていますが、Windowsのメモリ上にはEXCELが残っています(タスクマネージャで確認)。このEXCELが残っている間にファイルマネージャからExcelに関連づけられたファイルをダブルクリックで起動すると、Excelの枠だけが表示され、シートが表示されません。
 このExcelを終了し、もう一度Excelに関連づけられたファイルをダブルクリックで起動すると、タスクマネージャ上では一瞬EXCELが2つ表示され、先にあった方が消えて今度はシートが表示されます。このことから、アプリケーションはExcelを解放しており、ガベージコレクションが行われるのを待っていると判断しました。
 以前に『GC.Collection()でガベージコレクションが行われる』とご回答いただきましたが、exapp = Nothingの後にこれを入れても、タスクマネージャ上にEXCELが残ったままです。それとも、ただ単に「GC.Collection()」と書くのではなく、何か準備が必要なのでしょうか。
NothingButXMLInfoSet
大ベテラン
会議室デビュー日: 2002/07/16
投稿数: 116
投稿日時: 2002-12-05 18:41
おそらくGCとは無関係の問題だと思います。
たとえば、こんなのをQuitの前に入れたらどう動きますか?

コード:
dim ww as Workbook
for each ww in exapp.Workbooks
  ww.Close(false)
next


Jittaさんのコードの最後に次のコードを入れて実行してみましたが、メッセージボックスが表示されている間(アプリは終了していない)に、無事EXCEL.EXEは終了しました。

コード:
System.GC.Collect()
Microsoft.VisualBasic.MsgBox("hoge")

いのつち
ベテラン
会議室デビュー日: 2002/05/14
投稿数: 73
投稿日時: 2002-12-05 19:04

GCの明示的呼び出しとは異なりますが。
System.Runtime.InteropServices.Marshal.ReleaseComObject(ww);
はどうでしょう?

すみません。試していません。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2002-12-05 21:15
引用:

NothingBut.NETFXさんの書き込み (2002-12-05 18:41) より:
おそらくGCとは無関係の問題だと思います。
たとえば、こんなのをQuitの前に入れたらどう動きますか?

[code]
dim ww as Workbook
for each ww in exapp.Workbooks
ww.Close(false)
next
[code]
Jittaさんのコードの最後に次のコードを入れて実行してみましたが、メッセージボックスが表示されている間(アプリは終了していない)に、無事EXCEL.EXEは終了しました。

コード:

System.GC.Collect()
Microsoft.VisualBasic.MsgBox("hoge")




 これで消えてくれました。
 エクセルにデータをコピーするのに時間がかかるので、スレッド用のクラスを作成して処理していたのですが、スレッド処理クラスの中でNothingにするだけでなく、スレッド処理クラス自身をNothingしてやらなければいけなかったようです。

 そのまま引用するととんでもない量なのでメインになるところだけに削っているのですが、前回といい、その削った部分に問題が潜んでいるというのは、まだまだ経験値が足りませんね ー。ー;

 どうもありがとうございました。

[ メッセージ編集済み 編集者: Jitta 編集日時 2002-12-05 21:20 ]
1

スキルアップ/キャリアアップ(JOB@IT)