C# 从SQLServer2005中读取UTF8(XML)数据是最有效的方法

C# 从SQLServer2005中读取UTF8(XML)数据是最有效的方法,c#,sql,xml,streaming,serialization,C#,Sql,Xml,Streaming,Serialization,我想从SQLServer2005中读取大量数据单列nvarcharmax,并将其反序列化为一个对象。我们目前正在使用以下方法,但速度不够快,是否有更好/高效的方法 using(MemoryStream stream = Encoding.UTF8.GetBytes((string)cmd.ExecuteScalar())) { XmlTextReader xmlReader; DataContractSerializer deserializer; deserializer = n

我想从SQLServer2005中读取大量数据单列nvarcharmax,并将其反序列化为一个对象。我们目前正在使用以下方法,但速度不够快,是否有更好/高效的方法

using(MemoryStream stream = Encoding.UTF8.GetBytes((string)cmd.ExecuteScalar()))
{
  XmlTextReader xmlReader;
  DataContractSerializer deserializer;

  deserializer = new DataContractSerializer(typeToDeserialize);
  xmlReader = new XmlTextReader(stream);
  return deserializer.ReadObject(xmlReader);
} 
我曾尝试使用SqlDataReader和GetBytes来执行此操作,但后来出现了异常


Thanx提前测试。

我自己还没有测试过,但是调用GetSqlBytes的SqlDataReader似乎是一个更好的选择,因为它公开了一个流属性,您应该能够直接传递给XmlTextReader


MSDN上有一些关于GetSqlBytes的信息。

您是否可以选择切换到使用XML数据类型?它以二进制格式存储数据,并将XML结果作为XmlReader实例公开。在从数据库读取数据时,您正在解析数据,但如果使用XML列,它将已经被解析

同时,尝试以下方法:

string s;
using (SqlConnection conn = new SqlConnection(""))
{
    using (SqlCommand cmd = new SqlCommand("", conn))
    {
        s = (string) cmd.ExecuteScalar();
    }
}
using (StringReader sr = new StringReader(s))
{
    using (XmlReader reader = XmlReader.Create(sr))
    {
        DataContractSerializer deserializer = 
           new DataContractSerializer(typeToDeserialize);
        return deserializer.ReadObject(reader);
    }
}
不要再使用XmlTextReader了。 为什么要将字符串转换为字节,然后再转换回字符串?
约翰·坦克斯:我要试试这个。我会让你知道问题是从查询结果到.NET框架的延迟。查询的持续时间为0毫秒,没有网络延迟。在我们的serverVM软件上,我平均得到400个recs p/s单线程2K xml,处理器速率最高为5%。这是通过一个空的do while循环完成的。