R.NET 中的内存管理

问题描述

我有一个 dotnetcore3.1 ASP.NET 网站,它使用 R.NET 库调用 R 脚本。 R 脚本是内存密集型的(这很好),但是在完成并返回到 dotnet 时,内存不会被释放(不好)。我应该怎么做才能确保R环境被清除并且可以释放内存,包括全局变量、隐藏变量和附加包等等?

  • 查看 R 本身的答案,建议是“重新启动 R”,这在这里是不可能的,因为 R.NET 引擎必须是单例。
  • 也许可以通过使用新线程或进程为每个请求创建 R 引擎的新实例来解决此问题,因此也可以将其作为解决方案。

C# 代码

//Called once (registered in IOC as singleton)
rEngine= REngine.GetInstance(initialize: true,device: _characterDevice)
//...

//Called many times
try
{
    rEngine.Evaluate("source('myscript.R')");
}
finally {
    //Clear all R objects from memory
    rEngine.Evaluate("rm(list=ls())");
    rEngine.Evaluate("gc()");
    rEngine.ClearGlobalEnvironment(removeHiddenRVars:true,detachPackages: true);
}

注意的话,一个请求后的内存大概是1.5GB左右,不会掉(所以后面gc不影响)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)