- PR -

error:メモリ使用を導く可能性があります

1
投稿者投稿内容
ねね
会議室デビュー日: 2007/07/17
投稿数: 11
投稿日時: 2007-11-01 15:59
WindowsXP
Visual Studio2005
で開発しています。

プログラムより、対象となるサイトのINPUTエリアにデータをセットしようとしています。(対象となるサイトなどはiniファイルにアドレスを設定)
以下のようなコーディングを行っています。

-------------------------------------------------------------------------------
コード
-------------------------------------------------------------------------------
Try
'IEオブジェクト取得
w_Shell = CreateObject("Shell.Application")
w_ShellWindows = w_Shell.Windows()

For Each w_IE In w_ShellWindows
If w_IE.locationURL = Tbl_FileData(IN_TblNo).w_EHandleId Then
w_Flg = True
w_TargetIE = w_IE
Exit For
End If
If w_IE IsNot Nothing Then Marshal.ReleaseComObject(w_IE)
Next

If w_Flg = True Then
   :
   :
   :
End If

Catch ex As Exception

Finally
If w_IE IsNot Nothing Then Marshal.ReleaseComObject(w_IE)
If w_ShellWindows IsNot Nothing Then Marshal.ReleaseComObject(w_ShellWindows)
If w_Shell IsNot Nothing Then Marshal.ReleaseComObject(w_Shell)
End Try
-------------------------------------------------------------------------------

INPUTエリアにデータセットは出来るのですが、以下のようなエラーとなり
タスクマネージャーでチェックすると、このEXEのメモリ使用量がどんどん多く
なってしまいます。

-------------------------------------------------------------------------------
エラー
-------------------------------------------------------------------------------
CLR は、COM コンテキスト 0x1a2008 から COM コンテキスト 0x1a2178 へ 60 秒で移行できませんでした。
ターゲット コンテキストおよびアパートメントを所有するスレッドが、ポンプしない待機を行っているか、
Windows のメッセージを表示しないで非常に長い実行操作を処理しているかのどちらかです。
この状態は通常、パフォーマンスを低下させたり、アプリケーションが応答していない状態および増え続けるメモリ使用を
導く可能性があります。
この問題を回避するには、すべての Single Thread Apartment (STA) のスレッドが、CoWaitForMultipleHandles の
ようなポンプする待機プリミティブを使用するか、長い実行操作中に定期的にメッセージをポンプしなければなりません。
-------------------------------------------------------------------------------


6行目の「For Each w_IE In w_ShellWindows」が実行されるとこの現象が起こります。
12行目の「If w_IE IsNot Nothing Then Marshal.ReleaseComObject(w_IE)」でメモリが
うまく開放されていないのが原因と思われるのですが、どなたか解決法をご教授願えないでしょうか。

よろしくお願いします。



ねね
会議室デビュー日: 2007/07/17
投稿数: 11
投稿日時: 2007-11-12 09:54
MTAThreadAttributeクラスを使用することで解決しました。
1

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