2009-08-04 10 views
0

SQL Server 2005から大量のデータ(単一列のnvarchar(max))を読み込み、オブジェクトに逆シリアル化したいと考えています。私たちは現在以下のものを使用していますが、これは高速ではありません。SQL Server 2005のUTF8(XML)データを最も効率的に読み取る

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事前に。

答えて

0

XMLデータ型を使用するように切り替えることはできますか?データをバイナリ形式で格納し、結果をXmlReaderインスタンスとしてXMLの結果として公開します。データをデータベースから読み取るときにデータを解析していますが、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); 
    } 
} 
  1. もうXmlTextReaderを使用しないでください:ところで

    、このような何かを試してみてください。

  2. なぜ文字列をバイトに変換してから文字列に変換するのですか?
+0

私はこれを試してみます。私はあなたに知らせます – JSC

+0

奇妙な問題は、クエリ結果から.NETフレームワークまでの待ち時間です(クエリの持続時間は0msであり、ネットワーク遅延はありません)。私たちのサーバ(VM-ware)では、プロセッサ速度が最大5%のシングルスレッド(2K xml)の平均400 recs p/sを取得します。これは空のdo whileループで行われます。 – JSC

0

私はこれを自分自身でテストしていませんが、GetSqlBytesを呼び出すSqlDataReaderは、XmlTextReaderに直接渡すことができるStreamプロパティを公開するので、より良い選択と思われますか?

MSDNには、GetSqlBytes hereに関する情報があります。

関連する問題