私は実行に約1分かかり、25,000行のデータを返すSql SPを持っています。 (複数のデータセットを返すことができます)。c#SqlDataReaderからXElementへ効率的に
現在、これをXElement/XDocumentに変換して、いくつかのレポート結果を生成しようとしましたが、これは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()'と呼ばれるすべてのデータをフェッチすると、どれくらいかかりますか? –