RDotNet.dll中发生了未处理的“System.StackOverflowException”类型异常

时间:2017-08-08 11:39:07

标签: c# mysql r

上下文:下面的代码可以正常使用C#windows app来到MVC Web App时抛出异常“在RDotNet.dll中发生了'System.StackOverflowException'类型的未处理异常”,我使用的是RDotnet v1 .6.5

    string rScriptFilePath = ConfigurationManager.AppSettings["RScriptFilePath"].ToString();
    var envPath = Environment.GetEnvironmentVariable("PATH");var rBinPath = System.Environment.Is64BitProcess ? @"C:\Program Files\R\R-3.4.1\bin\x64" : @"C:\Program Files\R\R-3.4.1\bin\i386";
    Environment.SetEnvironmentVariable("PATH", envPath + Path.PathSeparator + rBinPath);
    engine = REngine.GetInstance();
    engine.Initialize();
    string execRScriptPath = "source(\"" + rScriptFilePath + "\", encoding = \"Windows-1252\")";
    engine.Evaluate(execRScriptPath);

and my R script file contains the below code to get Data from MYSQL DB 'Users' table and and load data into the same DB "testTable10" table

    if (!require("DT")) install.packages('DT')
    if (!require("DBI")) install.packages('DBI')
    if (!require("RMySQL")) install.packages('RMySQL')
    library(DT)
    library(DBI)
    library(RMySQL)

    mydb = dbConnect(MySQL(), user = 'userName', password = 'password', dbname = 'SomeDb', host = 'localhost')
    dbListTables(mydb)
    dbListFields(mydb, 'Users')
    rs = dbSendQuery(mydb, "select Id,Code,Name from Users")
    data = fetch(rs, n = -1)
    dbWriteTable(mydb, "testTable10", data)
    datatable(data) 

    Please help me to solve this problem....!

1 个答案:

答案 0 :(得分:0)

可能的解决方案1 ​​

将R.Net从控制台应用程序移动到MVC WebApp时遇到了同样的问题。

问题是我使用的库默认情况下会在数字旁边绘制图表。 当谈到这样的绘图函数时,抛出了StackOverflow-Exception。

在MVC上,无法访问GDI资源。 请检查您使用的某些功能是否需要/使用GDI功能。在我使用的函数上使用graph = FALSE禁用图形输出后,它正在使用MVC。也许你有类似的选择。

可能的解决方案2

即使禁用图形输出,我的r代码也只是第一次成功运行。在第二次运行时,再次发生Stackoverflow-Exception。 从Microsoft(https://mran.microsoft.com/open)切换到R-Open后,它现在正在,多次没有任何例外:)