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的问题。
答案 0 :(得分:1)
你试图获取太大的数据块来处理一个字符串(这本身就是一个反模式)。
请考虑使用更加语义正确的替代方法 - 创建一个Enumerator的类并逐个记录获取数据。或者 - 更好 - 只使用标准解决方案(LINQ-to-SQL / Entity Framework)。这将允许您不浪费内存进行字符串解析并获取实际对象(占用更少的内存)
使用存储过程将200 000(或任意数量)对象打包到字符串中以在应用程序中解析它......好吧......再也不要这样做了:)