2009-08-04 5 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를 사용하여 시도했지만 다른 예외가 발생했습니다.

고지.

답변

0

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); 
    } 
} 
  1. 더 이상 XmlTextReader를 사용하지 마십시오.
  2. 문자열을 바이트로 변환하고 다시 문자열로 변환하는 이유는 무엇입니까?
+0

고맙습니다. 나는 이것을 시도 할 것입니다. 나는 당신에게 알려줄 것이다 – JSC

+0

이상하게도 문제는 쿼리 결과에서 .NET 프레임 워크까지의 대기 시간이다 (쿼리의 지속 시간은 0ms이며 네트워크 대기 시간은 없다). 우리 서버 (VM-ware)에서 최대 5 %의 프로세서 속도로 평균 400 recs p/s 단일 스레드 (2K xml)를 얻습니다. 이것은 빈 do while 루프로 수행됩니다. – JSC

0

이 테스트를 직접 해보지는 않았지만 GetSqlBytes를 호출하는 SqlDataReader가 XmlTextReader에 직접 전달할 수있는 Stream 속성을 노출하므로 더 나은 선택이라고 생각하십니까?

MSDN에는 GetSqlBytes에 대한 정보가 있습니다. here.

관련 문제