tcl:堆栈空间不足(无限循环?)

时间:2015-10-21 11:37:02

标签: .net r r.net

我正在使用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

在第57行:我有这段代码:

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

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

编辑:

我是从asp.net mvc网络应用程序运行的。它第一次工作,当我刷新几次时,它会中断。

1 个答案:

答案 0 :(得分:2)

R.NET处于混合状态这一事实可能是一个促成因素,但如果有的话,这可能不是问题的核心。

我注意到两件事:

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

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

您是否有理由认为代码中的某些内容是多线程的?这是你自己可能不会明确做的事情。例如,您是从命令行,Windows窗体,Web应用程序运行吗?

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

关于stackoverflow的这篇文章Tkinter and thread. out of stack space (infinite loop?)涉及一些tcl / tk的经验以及多个线程访问它时的错误。