Quantcast
Channel: R.NET
Viewing all articles
Browse latest Browse all 1634

New Post: Memory leak (/issue), Please Help !

$
0
0
Hello All:

I've been busting my guts trying to get this function to work, but it runs out of memory after x = 3 or 4. I should be clearing all the stuff, trying every last trick I know.

What have I missed ? Is there a way I can explore further ?
I've run the code without all the R.NET stuff and runs fine , so I believe it must have to do with my R things.

See below:
  public static void ExampleFunction()
  {
        var oldPath = System.Environment.GetEnvironmentVariable("PATH");
        var rPath = ALLRG___.RFOLDER();

        var newPath = System.String.Format("{0}{1}{2}", rPath, System.IO.Path.PathSeparator, oldPath);
        System.Environment.SetEnvironmentVariable("PATH", newPath);

        REngine rEngine = REngine.CreateInstance("RDotNet");
        rEngine.Initialize();
        
        for (int x = 0; x < 20; x++)
        {
            int startPoint = 30;
            
            for (int c = 30; c < 600; c++)
            {
                sdTable.Clear();
                sdTable.Dispose();
                sdTable = new DataTable();
                sqlquery = " SELECT * FROM TEMPT_MAINTABLE " +
                           " WHERE SET_DAT_ID = " + c +
                           " AND POINT_DAT_ID >= 30 " +
                           " AND MODEL_ID = " + x +
                           " ORDER BY PRD_ID ASC, POINT_DAT_ID ASC ";
                myCommand = new SqlCommand(sqlquery, bthConn);
                sdReader = myCommand.ExecuteReader();
                sdTable.Load(sdReader);
                
                foreach (int sid in lsAllPrds)
                {
                    prdTable.Clear();
                    prdTable.Dispose();
                    prdTable = new DataTable();
                    prdTable =
                        (
                            from dbl in sdTable.AsEnumerable()
                            where
                                dbl.Field<int>("PRD_ID") == sid &&
                                dbl.ItemArray.All(v => v != null && v != DBNull.Value)
                            orderby
                                dbl.Field<int>("POINT_DAT_ID") ascending
                            select dbl
                        ).CopyToDataTable();

                    int use_length = prdTable.Rows.Count;

                    for (int i = -1; i < 15; i++)
                    {
                        string varName = "";
                        if (i >= 0) varName = indFldNames[i];
                        if (i == -1) varName = "SCORE_FIELD";

                        double[] tempDouble = new double[use_length];
                        for (int j = 0; j < use_length; j++)
                            tempDouble[j] = Convert.ToDouble(prdTable.Rows[j][varName]);

                        using (RDotNet.NumericVector prdPxVector = rEngine.CreateNumericVector(tempDouble))
                        {
                            rEngine.SetSymbol(varName, prdPxVector);

                            prdPxVector.Close();
                            prdPxVector.SetHandleAsInvalid();
                            prdPxVector.Dispose();

                        }
                    }

                    GC.Collect();
                    rEngine.ForceGarbageCollection();
                    
                    rEngine.Evaluate("model_dataframe <- data.frame(" + indFldNames.InnerJoin(",") + ", SCORE_FIELD )");
                    rEngine.Evaluate("rm(" + indFldNames.InnerJoin(",") + ", SCORE_FIELD)");
                    
                    rEngine.Evaluate("trans_model_dataframe <-" +
                                     "    ((model_dataframe[" + (model_period + 1) + ":" + (use_length) + ",]) - " +
                                     "    (model_dataframe[1:" + ((use_length - model_period)) + ",])) / " +
                                     "    (model_dataframe[1:" + ((use_length - model_period)) + ",]) ");
                                      
                    
                    rquery = "m <- lm(SCORE_FIELD ~ " + indFldNames.InnerJoin(model_jchar) + "," +
                             " data= trans_model_dataframe)";
                             
                    rEngine.Evaluate(rquery);

                    rEngine.Evaluate("m.RSQ <- summary(m)[['r.squared']]");
                    DynamicVector mRSQ = rEngine.GetSymbol("m.RSQ").AsVector();
                    double rSqOut = Convert.ToDouble(mRSQ[0]);
                    
                    
                    DynamicVector testvar5 = rEngine.GetSymbol("mNames").AsVector();
                    NumericMatrix testvar14t = rEngine.GetSymbol("mCoef").AsNumericMatrix();

                    for (int i = 0; i < testvar14t.RowCount; i++)
                    {
                        string tempIvN0 = testvar5[i].ToString();

                        string tempIvN = testvar5[i].ToString();

                        Single coeff = (Single)testvar14t[i, 0];
                        Single pvalue = (Single)testvar14t[i, 3];

                        if (Single.IsInfinity(coeff)) coeff = 0;
                        if (Single.IsNaN(coeff)) coeff = 0;

                        if (Single.IsInfinity(pvalue)) pvalue = 1;
                        if (Single.IsNaN(pvalue)) pvalue = 1;

                        DataRow oprNewRow = regnTable.NewRow();
                        oprNewRow["PRD_ID"] = sid;
                        oprNewRow["DAT_ID"] = c;
                        oprNewRow["LINDEX_ID"] = x;
                        oprNewRow["IVR_INDEX_ID"] = indVarCodes[tempIvN];
                        oprNewRow["IVR_INDEX_COEFF"] = coeff;
                        oprNewRow["IVR_INDEX_PVALUE"] = pvalue;
                        regnTable.Rows.Add(oprNewRow);

                    }

                    testvar5.Dispose();
                    testvar5 = null;

                    testvar14t.Dispose();
                    testvar14t = null;
                    
                    mRSQ.Dispose();
                    mRSQ = null;
                    
                    rEngine.Evaluate("rm(m)");
                    rEngine.Evaluate("rm(SCORE_FIELD)");
                    rEngine.Evaluate("rm(trans_model_dataframe)");
                    rEngine.Evaluate("rm(model_dataframe)");
                    rEngine.Evaluate("rm(m.RSQ)");
                    rEngine.Evaluate("rm(mNames)");
                    rEngine.Evaluate("rm(mCoef)");
                    rEngine.Evaluate("gc()");

                    rEngine.Evaluate("rm( list = ls( all = TRUE ) )");
                    rEngine.Evaluate("gc()");                           
                    
                }
                
                GC.Collect();
                rEngine.ForceGarbageCollection();
                
            }
        
        }
        
        rEngine.Close();
        rEngine.Dispose();
  }

Viewing all articles
Browse latest Browse all 1634

Trending Articles