2016-03-28 11 views
1

In meinem aktuellen Projekt verwende ich die C# und RDotNet (1.6.5). Ich berechne einige Statistiken wie Chi-Quadrat (Arbeiten mit Frames), Korrelationen und Regressionen (Plots). Ich möchte einige R-Plots in meine App bekommen. Ich setze die Plot-Ausgabe in eine PNG-Datei auf der Festplatte und später hebe ich sie auf und lese sie per Std. IO. Alles sieht so aus, als ob es ziemlich gut funktioniert, aber manchmal - ich kann nicht genau sagen, wann - das RDotNet abstürzt und etwas über den Zugriff auf ein ungültiges Verzeichnis sagt.RDotNet Speicherfehler

Es kann wie folgt aussehen:

RDotNet error 1

Oder wie folgt aus:

RDotNetError 2

Die häufigste Botschaft lautet:

Beachten Sie, dass die CreateDataFrame kann sei nicht der einzige p Spitze, wo der Fehler auftritt. Sobald es nur hier erscheint, einmal beim Aufruf der Funktion lm, einmal beim Auswerten einer anderen Formel.

Aktueller Test-Szenario war (einfach gesagt): Compute A, B, A, B, A, fehlgeschlagen. Ich möchte sagen, dass es abstürzt, während man etwas tut, das richtig bewertet wurde.

Kann mir bitte jemand eine Workaround zur Verfügung stellen? Das Schlimmste daran ist, dass RDotNet ein Singleton ist. Es ist nicht möglich, den Fehler einfach zu erfassen, REngine zu disponieren und einen neuen zu erstellen.

Antwort

1

Für zukünftige Googler:

Nach einigen Recherchen kam ich auf die Idee, die Fehler durch Zugriff auf die R-Umgebung von verschiedenen Threads verursacht werden. Nicht zur gleichen Zeit, aber immer noch von verschiedenen Threads (in meinem Fall Verarbeitung von Client-Anfragen).

Meine Lösung erstellt einen separaten Singleton-Thread für die Umgebung und synchronisiert den Zugriff darauf mithilfe einer Fassade. Nach dieser "Hack" -Anwendung treten keine weiteren Fehler mehr auf.