抛出了类型'System.OutOfMemoryException'的异常

时间:2014-01-10 08:45:10

标签: .net c#-4.0 xelement

private static void InsertClinicalItemMaster(XElement elecim)
    {
        //Insert To DataBase Logic
        try
        {
            String strStatus = "";
            SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=Test;User ID=sa;Password=saadmin");
            SqlCommand cmd = new SqlCommand("SP_Insert_ClinicalItemMaster", con);
            cmd.CommandType = CommandType.StoredProcedure;
             cmd.Parameters.Add("@xmlData", SqlDbType.Xml).Value = Convert.ToString(elecim);
            cmd.Parameters.Add("@retValue", SqlDbType.NVarChar).Value = strStatus;
            con.Open();
            cmd.ExecuteNonQuery();
            con.Close();
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

当“cmd.ExecuteNonQuery();”执行然后我超过“OutOfMemoryException”。我假设将XElement转换为String的问题。

1 个答案:

答案 0 :(得分:1)

你试图获取太大的数据块来处理一个字符串(这本身就是一个反模式)。

请考虑使用更加语义正确的替代方法 - 创建一个Enumerator的类并逐个记录获取数据。或者 - 更好 - 只使用标准解决方案(LINQ-to-SQL / Entity Framework)。这将允许您不浪费内存进行字符串解析并获取实际对象(占用更少的内存)

使用存储过程将200 000(或任意数量)对象打包到字符串中以在应用程序中解析它......好吧......再也不要这样做了:)