2015-10-21 1 views
1

Я использую R.net и пытаюсь вызвать функцию, написанную на R.TCL: из стека (бесконечный цикл?)

Это мой код в визуальной студии

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 }); 

Я просто не знаю, как решить эту проблему, и что это вообще значит !! любая помощь будет принята с благодарностью.

EDIT:

Я бегу это из ASP.NET MVC веб-приложение. Он работает в первый раз, и когда я обновляюсь пару раз, он ломается.

ответ

2

Тот факт, что R.NET находится в миксе, может быть фактором, способствующим этому, но это, вероятно, не является основной проблемой, если вообще.

Две вещи я отмечаю:

  • Он работает большую часть времени, но иногда не
  • что-то делать с пространством стека (в контексте использования R)

Первый точечные намеки на возможность проблем с многопоточными, как правило, невоспроизводимыми и, по-видимому, случайными. Так же делает и второе, но это не очевидно и причуда R.

У вас есть причина думать, что что-то в вашем коде где-то многопоточно? это то, что вы не можете делать явно сами. Например, вы используете это из командной строки, форм Windows, веб-приложения?

Этот post on R-devel дает некоторую информацию о взаимодействии R CStackLimit и многопоточности.

Этот пост Tkinter and thread. out of stack space (infinite loop?) на stackoverflow связывает опыт с некоторыми материалами tcl/tk и ошибками, если к нему обращаются несколько потоков.

+0

спасибо, что написал. Я добавил пару строк в вопрос. Я прошел через ваши ссылки, но я не уверен, что делать или что менять. – kandroid

+0

Привет. в этой строке вы написали: «У вас есть причина думать, что что-то в вашем коде где-то многопоточно?». Я исследовал и выяснил, когда я пытаюсь получить доступ к части вычисления R из нескольких браузеров и удалять обновления слишком много раз, он ломается. так что я сделал, добавил некоторые потоки/Семафор в моем .net-коде и выглядит так, что ошибка не приходит снова с тем же типом теста. – kandroid