2
私のアプリケーションはPowerShellをホストし、RunSpace.SessionStateProxy.SetVariable()
経由でCOMオブジェクト参照を追加します。いくつかのPowerShellコードで変数を追加してInvokeを呼び出した後、COMオブジェクトは適切に解放されません。 PowerShellと.NETランタイムによって、COMオブジェクトモデルの呼び出しによって返された一時参照を含むすべてのCOM参照を強制的に解放するにはどうすればよいですか?私もPipeLine.Dispose()
、Runspace.Close()
、およびGC.Collect()
、すべての変数に PowerShell RunSpaceで使用されるCOM参照を解放する
object o = rs.SessionStateProxy.GetVariable(name);
if (o != null)
{
rs.SessionStateProxy.SetVariable(name, null);
Marshal.ReleaseComObject(o);
}
を呼び出してみましたが、それは助けにはなりませんでした。
'Marshal.FinalReleaseComObject'を試してみることもできますが、null以外の参照に加えて他のスクリプト/コマンドがあると思います。 –
それも役に立たなかった。 PowerShellコードがこれらのオブジェクトを呼び出さなくても(つまり、変数は設定されていますが使用されていなくても)動作します。 –
私はそれを理解しました - 変数を格納するとき、一時参照が作成されていました:rs.SessionStateProxy.SetVariable( "name"、obj.subobj)。代わりにobj.subobjの戻り値を変数に格納し、SetVariableを呼び出した後に解放すれば、すべてが期待通りに機能します。ありがとう。 –