【发布时间】:2017-01-17 23:33:35
【问题描述】:
考虑下面的代码
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);
}
}
当我为包含 8000 个节点的 nodeList 运行此程序时,大约需要 6 个小时。我一直在寻找一种减少时间的方法,一开始我想也许我可以为每次迭代创建一个任务,但它变得比以前慢了,我认为这是因为在任务之间切换的开销。
我想知道提高这段代码性能的最佳方法是什么,因为它似乎非常占用 CPU 和内存?
【问题讨论】:
-
我需要查看 xml 的几个部分,其中包含重复的主标记。 6 小时对于这么小的文件来说太长了。
标签: c# xml performance datacontractserializer