最近,在公司中,我们从一些旧项目中获得了一些 MSSQL 数据库,我们必须将其集成到当前解决方案中。
数据库有大约 100-150 个使用 FOR XML AUTO 子句的存储过程,因此查询返回完整的对象图作为 XML 而不是行。
最快的解决方案(对于我们公司而言)是基于从数据库返回的 xml 数据创建可序列化的类(使用 xsd 工具)。
这是我们用来实例化这些对象的代码:
public static T GetObjectFromXml<T>(DbCommand command)
{
SqlDatabase db = (SqlDatabase)DB;
XmlReader xmlReader = null;
T returnValue;
xmlReader = db.ExecuteXmlReader(command);
xmlReader.MoveToContent();
XmlSerializer serializer = new XmlSerializer(typeof(T));
returnValue = (T)serializer.Deserialize(xmlReader);
xmlReader.Close();
return returnValue;
}
DB 代表企业库中的数据库类。
当 sp 返回大量数据时(例如,其中包含大量子对象、孙子对象、grandgrndchldrn ......对象的一些大型对象集合),此方法的执行会持续很长时间。
应用程序中的数据肯定会继续增长,我必须考虑对此进行优化。
所以,我想知道这是否是不好的做法(使用 FORXML、XmlReader 和反序列化),或者我们应该重写存储过程并使用 SqlDataReaders 或 Linq2Sql,或者这个片段中有一些 perf.issue(不正确使用泛型或其他东西) ?
编辑 我知道一次加载大量数据是不好的做法,而且我知道加载过程应该分成更小的块,但我只是想知道这段特定的代码是否有问题。