问题描述
我有一个 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 (将#修改为@)