Я использую веб-сервис для генерации некоторого XML и передачи на DataSet
.
Ниже код для чтения XML в DataSet
:Прочитать XML в DataSet быстрее, чем с XmlReader в .net framework 2.0, window CE 6.5
byte[] buffer = Encoding.UTF8.GetBytes(xmlData);
using (System.IO.MemoryStream stream = new System.IO.MemoryStream(buffer))
{
System.Xml.XmlReader reader = System.Xml.XmlReader.Create(stream);
ds.ReadXml(reader);
}
Xml файл, как показано ниже, получить от SOAP:
<NewDataSet>
<Table>
<ID>1002065</ID>
<Item_No>0000043</Item_No>
<Description>Test2</Description>
<Remarks />
<Ref_No />
</Table>
<Table>
<ID>1002034</ID>
<Item_No>0000054</Item_No>
<Description>Test2</Description>
<Remarks />
<Ref_No />
</Table>
</NewDataSet>
я узнал, что ds.ReadXml
занимает 42 секунд, чтобы загрузить 1700 записей очень медленно , Использование рамки 2.0 Любые предложения по увеличению скорости?
Теперь измените
XmlDocument doc = new XmlDocument();
doc.LoadXml(xmlData);
XmlNode nodes = doc.DocumentElement;
string ID = "", Item_No= "", Description = "", Remarks = "", Ref_No= "";
DataTable dt = new DataTable();
dt.Clear();
dt.Columns.Add("ID");
dt.Columns.Add("Item_No");
dt.Columns.Add("Description");
dt.Columns.Add("Remarks");
dt.Columns.Add("Ref_No");
foreach (XmlNode node in nodes)
{
ID = node.SelectSingleNode("ID").InnerText;
Item_No = node.SelectSingleNode("Item_No").InnerText;
Description = node.SelectSingleNode("Description").InnerText;
Remarks = node.SelectSingleNode("Remarks").InnerText;
Ref_No = node.SelectSingleNode("Ref_No").InnerText;
dt.Rows.Add(ID, Item_No, Description, Remarks , Ref_No)
}
dataSet ds= new dataSet();
ds.Tables.Add(dt);
Но скорость загрузки до сих пор же 1700 записей в 40 секунд.
как о 'XDocument XML = XDocument.Load (поток);' –
, что ссылка на XDocument? – user14351
Как в стороне, вы можете использовать 'StringReader' вместо того, чтобы получать все строковые байты и создавать поток памяти над ними. 'XmlReader.Create' имеет перегрузку, которая принимает' TextReader'. –