2015-10-21 70 views
1

我使用R.net并试图调用用R.TCL:的堆栈空间(无限循环?)

功能这是我在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的web应用程序运行此。它第一次工作,当我刷新几次时,它会中断。

回答

2

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

两件事我注意到:

  • 它工作的大部分时间,但有时不
  • 一件用堆栈空间做(在使用R中的上下文中)

第一暗示着多线程问题的可能性,这是众所周知的不可重复的,显然是随机的。第二个,但这不是明显的和R的怪癖。你是否有理由在你的代码中思考某些东西是多线程的?这是你自己可能不明确做的事。例如,你是从命令行,Windows窗体,Web应用程序运行它?

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

这篇文章Tkinter and thread. out of stack space (infinite loop?)关于stackoverflow与一些tcl/tk的东西和错误,如果多个线程访问它的经验。

+0

感谢您的写作。我在问题中添加了几行。我已经通过你的链接,但我不知道该怎么做或改变什么。 – kandroid

+0

嗨。你写了这样一句话:“你有理由在代码中思考某些东西,是多线程的吗?”..我调查并发现,当我尝试从多个浏览器访问R计算部分并且刷新太多时次,它破裂。所以我所做的是,在我的.net代码中添加了一些线程/信号量,并且看起来错误不会在同一种测试中再次出现。 – kandroid