执行Reader内存异常

时间:2018-04-03 17:43:43

标签: c# sql arrays oledb

编辑:请不要假设并随意说它的副本,请检查并验证自己。当你立即downvote并说它重复时,这对用户没有帮助。那些回应没有做我正在做的事情。我已经尝试过了。

而不是在70万条记录中获得OOM,而是在800k记录中完成。所以这种反应没有帮助。

我正在尝试通过SP从数据库中检索大量的行,并且当我的类Object达到某个限制时,我继续在reader.Read()上获得Out of Memory Exception。

  SqlCommand cmd = new SqlCommand("usp_GetTonofData", connection);
                cmd.CommandType = System.Data.CommandType.StoredProcedure;
                SqlCommandBuilder.DeriveParameters(cmd);                 
                cmd.Parameters[1].Value = "Blah";
                cmd.Parameters[2].Value = "foo";
                cmd.CommandTimeout = 1000;              
                SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess);               

                while (reader.Read())
                {
                    object[] values = new object[reader.FieldCount];
                    reader.GetValues(values);
  OOM Exception occurs here around the 700k records mark ---> var category = new DataClass()
                    {
                        Prop1 = values[0].ToString(),
                        Prop2 = Convert.ToDateTime(values[1]).ToString("MM/dd/yyyy"),
                        Prop3 = Convert.ToDateTime(values[2]).ToString("MM/dd/yyyy"),
                        Prop4 = Convert.ToDateTime(values[3]).ToString("MM/dd/yyyy"),
                        Prop5 = values[4].ToString(),
                        Prop6 = values[5].ToString(),
                        Prop7 = values[28].ToString(),
                        Prop8 = values[29].ToString(),
                        Prop9 = values[30].ToString(),
                        Prop10 = values[31].ToString(),
                        Prop11 = values[32].ToString(),
                        Prop12 = values[33].ToString(),
                    };

                    storedProcedureList.Add(category);
                }

                connection.Close();
                connection.Dispose();    
            }

      return storedProcedureList;

0 个答案:

没有答案