데이터 집합을 생성하고 XML 데이터를 생성하는 함수가 있습니다. 이 기능은 완벽하게 작동합니다. 문제는 보고서를 여러 번 실행 한 후 "메모리 부족"오류가 발생한다는 것입니다. 보고서를 테스트 할 때이 XmlDocument 명령에 도달하면 메모리 사용량이 많이 증가한다는 것을 발견했습니다. GC를 사용했지만 사용하지 않았습니까?XmlDocument를 사용할 때 메모리가 부족합니다.
if (ddlDir.SelectedItem != null && ddlSec.SelectedItem != null)
{
using (DataSet dsClosedKPICalls = GetReportData())
{
dsClosedKPICalls.DataSetName = "ClosedKPICalls";
foreach (DataTable table in dsClosedKPICalls.Tables)
{
table.TableName = "ServiceInfo";
}
XmlContent = dsClosedKPICalls.GetXml();
}
XmlDocument XML_Data = new XmlDocument(); // contains the resultant XML data
XML_Data.LoadXml(XmlContent);
XmlNodeList TablesList = XML_Data.SelectNodes("ClosedKPICalls/ServiceInfo");
for (int i = 0; i < TablesList.Count; i++)
{
XmlDocument innerXML = new XmlDocument();
using (DataSet dsTaskDetails = getSplitupRecords(TablesList.Item(i).SelectSingleNode("ServiceNo").InnerText))
{
dsTaskDetails.DataSetName = "TaskDetails";
foreach (DataTable tbl in dsTaskDetails.Tables)
{
tbl.TableName = "RequestInfo";
}
innerXML.LoadXml(dsTaskDetails.GetXml());
TablesList.Item(i).AppendChild(XML_Data.ImportNode(innerXML.SelectSingleNode("TaskDetails"), true));
innerXML = null;
GC.Collect();
GC.WaitForPendingFinalizers();
}
}
}
논리를 나눌 수있는 방법에 대해 생각해보십시오. 한 테이블에있는 모든 테이블을 처리해야합니까? 메모리 풋 프린트를 줄이기 위해 XmlTextWriter를 사용할 수 있습니까? –
답장을 보내 주셔서 감사합니다. 좀 더 설명해 주시겠습니까? – Noora