2013-12-09 3 views
1

Я использую веб-службу, которая возвращает xml, и я хочу прочитать ее в строке. Я использую метод ReadToEnd класса StreamReader, но в этот момент OutOfMemory Exception возникает из-за большого количества XML-данных. Есть ли способ, чтобы получить этот .my код нижеStreamReader OutOfMemoryException

 Stream dataStream; 
     WebResponse response; 
     string responseFromServer = string.Empty; 
     string url = myurl; 

     WebRequest request = WebRequest.Create(url); 

     ASCIIEncoding encoding = new ASCIIEncoding(); 

     byte[] data = encoding.GetBytes(postData.ToString()); 

     request.Method = "POST"; 
     request.ContentType = "application/x-www-form-urlencoded"; 
     request.ContentLength = data.Length; 

     dataStream = request.GetRequestStream(); 
     dataStream.Write(data, 0, data.Length); 
     dataStream.Close(); 
     response = request.GetResponse(); 

     using (Stream stream = response.GetResponseStream()) 
     { 
      using (StreamReader reader = new StreamReader(stream)) 
      { 
       try 
       { 
        responseFromServer = reader.ReadToEnd(); 
       } 
       catch (Exception ex) 
       { 
        throw ex;   
       }    
      } 
     } 
+2

Не используйте 'ReadToEnd' в потоке, который полностью побеждает его цель. Вы используете потоки, читая байты или строки, действуя на каждый раз, затем отбрасывая его и обрабатывая следующий байт или строку. О, и удалите 'catch (Exception ex) throw ex;' из всего кода, который вы когда-либо пишете. –

+0

Что вы хотите делать с данными? Вы хотите сохранить его в файл? Сформировать XML-документ? Прочитайте и обработайте его в режиме онлайн? Ответ на этот вопрос определит, как вы читаете данные из потока. –

+0

Я хочу загрузить документ xml в свой объект XmlDocument. Я использовал метод ReadToEnd для создания объекта XMLDocument. – user2762782

ответ

1

Существует Load overload, который принимает TextReader. StreamReader происходит от TextReader, поэтому вы должны иметь возможность написать doc.Load(reader).