阿罗哈,
我有一个8MB的XML文件,我希望反序列化。 我正在使用此代码:
public static T Deserialize<T>(string xml)
{
TextReader reader = new StringReader(xml);
Type type = typeof(T);
XmlSerializer serializer = new XmlSerializer(type);
T obj = (T)serializer.Deserialize(reader);
return obj;
}
此代码大约运行一分钟,这对我来说似乎相当慢。我曾尝试使用sgen.exe预编译序列化dll,但这并没有改变性能。
我还有哪些其他方法可以改善表现?
[edit]我需要反序列化创建的对象来执行(基本)转换。 XML是从外部Web服务接收的。
答案 0 :(得分:3)
XmlSerializer使用反射,因此如果性能有问题,则不是最佳选择。
您可以使用XmlDocument
或XDocument
类构建XML文档的DOM并使用它,或者更快地使用XmlReader
。然而,XmlReader
要求您自己编写任何对象映射 - 如果需要 - 。
最好的方法取决于您想要对XML数据做什么。您只需要提取某些值,还是必须工作和编辑整个文档对象模型?
答案 1 :(得分:2)
是的它确实使用了反射,但性能是一个灰色区域。在谈论8mb文件时......是的,它会慢得多。但如果处理一个小文件,它将不会。
我不会说读取文件样式瓶XmlReader或XPath会更容易或更快。然后告诉某些东西将你的xml变成一个对象或你的对象变成XML会更容易吗?不多了。
现在,如果你需要细粒度控制,那么你可能需要手工完成。
个人选择是这样的。我愿意放弃一点速度来保存一大堆令人讨厌的代码。
与软件开发中的其他所有内容一样,存在折衷方案。
答案 2 :(得分:1)
您可以尝试在“T”类中实现IXmlSerializable编写自定义逻辑来处理XML。