private static void doTestObjectFinalization(RuntimeDiagnostics r, int sizeEach, int n, bool disposeSexp = false) { NumericVector[] v = r.CreateNumericVectors(n, sizeEach); checkSizes(v, sizeEach); var v2 = r.Lapply(v, "function(x) {x * x}"); checkSizes(v2, sizeEach); v = null; for (int i = 0; i < 5; i++) { GC.Collect(); v = r.CreateNumericVectors(n, sizeEach); checkSizes(v, sizeEach); if (disposeSexp) for (int j = 0; j < v.Length; j++) { v[j].Dispose(); } } }
private static void Main(string[] args) { REngine.SetEnvironmentVariables(); using (var engine = REngine.GetInstance(device: device)) { engine.EnableLock = true; var r = new RuntimeDiagnostics(engine); int sizeEach = 20; int n = 1000; NumericVector[] nVecs = r.CreateNumericVectors(n, sizeEach); nVecs = r.Lapply(nVecs, "function(x) {x * 2}"); doMultiThreadingOperation(r, sizeEach, n, 50, false); doTestObjectFinalization(r, sizeEach, n); doTestObjectFinalization(r, sizeEach, n, disposeSexp: true); nVecs = null; engine.Dispose(); // deliberate test } }