tcl: 栈外 space (无限循环?)

tcl: out of stack space (infinite loop?)

我正在使用 R.net 并尝试调用用 R 编写的函数。

这是我在 visual studio

中的代码
var myfnc = _engine.Evaluate("source('.....CalculateCost.R')").AsCharacter();

var _uid = _engine.CreateCharacter(uid);
var arr = _engine.CreateIntegerVector(ids.Length);
var _batchGuid = _engine.CreateCharacter(batchId);

var ss = _engine.Evaluate(myfnc[0]).AsFunction();
ss.Invoke(new SymbolicExpression[] { arr, _uid, _batchGuid });

//_engine has been initialized in the constructor

以上代码将生成一个绘图并保存在一个文件夹中。就是这样。

问题:它在大多数情况下都运行良好。但有时它会抛出以下错误。

Error in structure(.External(.C_dotTclObjv, objv), class = "tclObj") : 
[tcl] out of stack space (infinite loop?).
 at RDotNet.Function.evaluateCall(IntPtr call)
at RDotNet.Function.createCallAndEvaluate(IntPtr argument)
at RDotNet.Function.InvokeOrderedArguments(SymbolicExpression[] args)
at RDotNet.Closure.Invoke(SymbolicExpression[] args)
at SmartPoolApp.Helpers.RStuffGenerator.ExecuteCostCalculation(Int32[] ids,    String uid, String batchId) in k:\Repositories\myprogram\Helpers\RStuffGenerator.cs:line 157

在line:57中,我有这个代码:

ss.Invoke(new SymbolicExpression[] { arr, _uid, _batchGuid });

我只是不知道如何解决它,甚至不知道它是什么意思!! 任何帮助将不胜感激。

编辑:

我是 运行 这个来自 asp.net mvc 网络应用程序。它第一次工作,当我刷新几次时,它就坏了。

R.NET 可能是一个影响因素,但这可能不是问题的核心,如果有的话。

我注意到两件事:

  • 大部分时间都有效,但有时无效
  • 与堆栈有关 space(在使用 R 的上下文中)

第一点暗示了多线程问题的可能性,众所周知,不可重现并且显然是随机的。第二个也是,但这并不明显,是 R 的一个怪癖。

您是否有理由认为您的代码中某处是多线程的?这是你自己可能不会明确做的事情。例如,您是 运行 命令行、windows 表单、Web 应用程序吗?

这个 post on R-devel 提供了一些关于 R CStackLimit 和多线程相互作用的信息。

Whosebug 上的这个 post Tkinter and thread. out of stack space (infinite loop?) 涉及一些 tcl/tk 内容的经验和多个线程访问它时的错误。