Учитывая приведенный ниже кодФильтрация большое количество XMLNodes с использованием DataContractSerializer очень медленно
List<CustomConversionData> Filter(XmlNodeList nodeList)
{
var filteredResults= new List<CustomConversionData>();
//Deserailze the data:
foreach (XmlNode item in nodeList)
{
try
{
CustomConversionData obj = Deserialize<CustomConversionData>(item.ParentNode.OuterXml);
filteredResults.Add(obj);
}
catch
{
try
{
CustomConversionData obj = Deserialize<CustomConversionData>(item.OuterXml);
filteredResults.Add(obj);
}
catch (Exception e) {
}
}
}
return filteredResults;
}
и метод, который делают десериализации
public T Deserialize<T>(string rawXml)
{
using (XmlReader reader = XmlReader.Create(new StringReader(rawXml)))
{
DataContractSerializer formatter =
new DataContractSerializer(typeof(T));
return (T)formatter.ReadObject(reader);
}
}
Когда я запускаю это для nodeList
, который состоит из 8000 узлов, он занимает около 6 часов. Я искал способ сократить это время, и в начале я подумал, что, возможно, я могу создать задачу для каждой итерации, но она стала медленнее, чем раньше, и я думаю, что это было из-за накладных расходов на переключение между задачами.
Мне было интересно, какой был бы лучший способ улучшить производительность этого кода, поскольку он, по-видимому, очень насыщен процессором и памятью?
Мне нужно увидеть пару разделов xml с повторяющимся основным тегом. 6 часов - это путь к такому маленькому файлу. – jdweng