- - PR -
error:メモリ使用を導く可能性があります
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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-11-12 09:54
MTAThreadAttributeクラスを使用することで解決しました。
|
1