gpt4 book ai didi

c# - RDotNet 内存故障

转载 作者:行者123 更新时间:2023-11-30 23:27:54 33 4
gpt4 key购买 nike

在我当前的项目中,我使用的是 C# 和 RDotNet (1.6.5)。我正在计算一些统计数据,例如卡方(使用框架)、相关性和回归(绘图)。我想在我的应用程序中添加一些 R 图。我将绘图输出放入磁盘上的 PNG 文件中,稍后我将其拾取并通过 std 读取。 IO。一切看起来都运行良好,但有时 - 我无法准确说出什么时候 - RDotNet 崩溃并提示有关访问错误内存的信息。

它看起来像这样:

RDotNet error 1

或者像这样:

RDotNetError 2

最常见的消息是:

Attempted to read or write protected memory. This is often an indication that other memory is corrupt.

at RDotNet.Function.evaluateCall(IntPtr call)
at RDotNet.Function.createCallAndEvaluate(IntPtr argument)
at RDotNet.Function.InvokeNamedFast(Tuple`2[] args)
at RDotNet.REngineExtension.CreateDataFrame(REngine engine, IEnumerable[] columns, String[] columnNames, String[] rowNames, Boolean checkRows, Boolean checkNames, Boolean stringsAsFactors)

请注意,CreateDataFrame 可能不是唯一出现错误的地方。一次出现在这里,一次出现在调用 lm 函数时,一次出现在计算一些不同的公式时。

当前的测试场景是(简单地说):计算 A、B、A、B、A,失败。我想说它在做一些已经被正确评估的事情时崩溃了。

有人可以提供一些解决方法吗?最糟糕的是 RDotNet 是一个单例。不可能简单地捕获错误、处理 REngine 并创建新的错误。

最佳答案

对于 future 的谷歌员工:

经过一番研究后,我发现这些错误是由不同线程访问 R 环境引起的。不是同时,但仍然来自不同的线程(在我的例子中是处理客户端请求)。

我的解决方案是为环境创建单独的单例线程并使用外观同步对其的访问。此“hack”应用程序后不会再出现错误。

关于c# - RDotNet 内存故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36268349/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com