Я использую метод Nopcommerce для создания возможной комбинации атрибутов продукта, и я получаю System.OutOfMemoryException
. Пожалуйста, проверьте код ниже и предоставьте мне лучшее решение для этого:
public virtual string AddProductAttribute(string attributes, CustomProductVariantAttribute pva, string value)
{
string result = string.Empty;
try
{
var xmlDoc = new XmlDocument();
if (String.IsNullOrEmpty(attributes))
{
var element1 = xmlDoc.CreateElement("Attributes");
xmlDoc.AppendChild(element1);
}
else
{
xmlDoc.LoadXml(attributes);
}
var rootElement = (XmlElement)xmlDoc.SelectSingleNode(@"//Attributes");
XmlElement pvaElement = null;
//find existing
var nodeList1 = xmlDoc.SelectNodes(@"//Attributes/ProductVariantAttribute");
foreach (XmlNode node1 in nodeList1)
{
if (node1.Attributes != null && node1.Attributes["ID"] != null)
{
string str1 = node1.Attributes["ID"].InnerText.Trim();
int id = 0;
if (int.TryParse(str1, out id))
{
if (id == pva.Id)
{
pvaElement = (XmlElement)node1;
break;
}
}
}
}
//create new one if not found
if (pvaElement == null)
{
pvaElement = xmlDoc.CreateElement("ProductVariantAttribute");
pvaElement.SetAttribute("ID", pva.Id.ToString());
rootElement.AppendChild(pvaElement);
}
var pvavElement = xmlDoc.CreateElement("ProductVariantAttributeValue");
pvaElement.AppendChild(pvavElement);
var pvavVElement = xmlDoc.CreateElement("Value");
pvavVElement.InnerText = value;
pvavElement.AppendChild(pvavVElement);
result = xmlDoc.OuterXml;
}
catch (Exception exc)
{
Debug.Write(exc.ToString());
}
return result;
}
Ожидание ответа.