2

我正在使用以下代码在来自 c# 的单独“appDomain”上执行 IronPython 脚本。(我使用这种方法来解决内存泄漏问题)花费较少时间(少于 3 分钟)的脚本执行良好。

但是,如果需要较长时间(超过 5 分钟)的脚本会引发异常说 -> System.Runtime.Remoting.RemotingException: Object '/011b230e_2f28_4caa_8bbc_92fabb63b311/vhpajnwe48ogwedf6zwikqow_4.rem'

using System;
using Microsoft.Scripting;

namespace PythonHostSamle
{
  class Program
  {
    static void Main(string[] args)
    {
        AppDomain sandbox = AppDomain.CreateDomain("sandbox");
        var engine = IronPython.Hosting.Python.CreateEngine(sandbox);
        var searchPaths = engine.GetSearchPaths();
        searchPaths.Add(@"C:\Python25\Lib");
        searchPaths.Add(@"C:\RevitPythonShell");
        engine.SetSearchPaths(searchPaths);

        ScriptScope scope = engine.ExecuteFile("C:\Python25\Test.py")
        // Script takes morethan 5mins to execute(sleep in the script)

        ObjectHandle oh = scope.GetVariableHandle("GlobalVariableName")
        // System throws following exception              
        //System.Runtime.Remoting.RemotingException:
        // Object '/011b230e_2f28_4caa_8bbc_92fabb63b311/vhpajnwe48ogwedf6zwikqow_4.rem'

        Console.ReadKey();
    }
  }
}
4

1 回答 1

1

覆盖 InitializeLifetimeServices 并返回 null 将是正常的方法。我怀疑在你的情况下这是可能的。在 app.config 文件中包含<lifetime>元素是另一种方法。

于 2009-12-01T04:36:22.773 回答