c#SqlDataReader可高效执行XElement
我有一个Sql SP,运行大约需要1分钟,返回25000行数据。(可以返回多个数据集) 当前尝试将其转换为XElement/XDocument以生成多个报告,结果c#方法转换此文件需要30分钟以上,这需要Sql Connection\Command超时30分钟,这太长了 有人能帮我解决问题/找到我可以改进以下转换代码的地方吗,因为这里的某个地方肯定存在巨大的低效率 电话c#SqlDataReader可高效执行XElement,c#,sql,linq,xelement,C#,Sql,Linq,Xelement,我有一个Sql SP,运行大约需要1分钟,返回25000行数据。(可以返回多个数据集) 当前尝试将其转换为XElement/XDocument以生成多个报告,结果c#方法转换此文件需要30分钟以上,这需要Sql Connection\Command超时30分钟,这太长了 有人能帮我解决问题/找到我可以改进以下转换代码的地方吗,因为这里的某个地方肯定存在巨大的低效率 电话 public void xyzCall() { .... XElement result = SqlDataReade
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;
}
私有XElement SqlDataReadertoXML(SqlDataReader datareader)
{
XElement结果=新XElement(“结果集”);
//读取下一个记录集
做
{
XElement结果=新XElement(“结果集”);
//读取此记录集中的下一行
while(datareader.Read())
{
XElement数据节点=新XElement(“项目”);
//读取此记录集中的每一列
对于(int i=0;i如果您有权访问数据库,我建议您修改SP或编写一个新的SP,以更快地以首选XML格式返回数据。对于大型数据集,在内存中构建XML不是一个好主意
我看不出任何明显的问题,但将内存中的250K行转换为xml会消耗CPU,这并不奇怪 您可以做的一件事是//ize进程(例如,每个resultSet一个线程)
我将使用SQL Server的
for xml
子句来代替 我看不出任何明显的问题,但将内存中的250K行转换为xml会消耗CPU,这并不奇怪
您可以做的一件事是//ize进程(例如,每个resultSet一个线程)
我将使用SQL Server的
for xml
子句来代替 您有多确定LINQ到XML是瓶颈?如果去掉LINQ到XML位,但仍然获取所有数据(仍然调用datareader.GetName(i)
和datareader[i].ToString()
),需要多长时间?您有多确定LINQ到XML是瓶颈?如果去掉LINQ到XML位,但仍然获取所有数据(仍然调用datareader.GetName(i)
和datareader[i].ToString()
),需要多长时间?