25,000 행의 데이터를 반환하는 데 약 1 분이 걸리는 SQL SP가 있습니다. (다중 데이터 세트가 리턴 될 수 있음).효율적으로 XElement에 대한 SqlDataReader를 사용합니다.
현재이 값을 XElement/XDocument로 변환하여 C# 메서드에서 여러 보고서 결과를 얻으려는 시도가 30 분 이상 소요되며 Sql Connection \ Command Timeout이 30 분이 소요됩니다.
어디서나 비효율적 일 수 있으므로 다음 전환 코드를 개선 할 수있는 곳이면 누구나 문제를 해결하고 찾을 수 있습니까?
콜
public void xyzCall()
{
....
XElement result = SqlDataReadertoXML(sqlcommand.ExecuteReader());
....
}
데이터베이스에 액세스 할 수있는 경우
private XElement SqlDataReadertoXML(SqlDataReader datareader)
{
XElement results = new XElement("ResultSets");
// Read Next RecordSet
do
{
XElement result = new XElement("ResultSet");
//Read Next Row in this RecordSet
while (datareader.Read())
{
XElement datanode = new XElement("Item");
// Read Each Column in this RecordSet
for (int i = 0; i < datareader.FieldCount; i++)
{
// Node.Attr("Name") = Column Name, Node.Value = Field
if (datareader.GetName(i) != "") datanode.Add(new XElement(datareader.GetName(i), datareader[i].ToString()));
}
result.Add(datanode);
}
results.Add(new XElement(result));
} while (datareader.NextResult());
datareader.Close();
return results;
}
LINQ to XML이 병목 현상인지 확인하십시오. LINQ to XML 비트를 가져 오지만 여전히 모든 데이터를 가져 오는 경우 (여전히 'datareader.GetName (i)'및 'datareader [i] .ToString()') 얼마나 걸리나요? –