3

阿罗哈,

我有一个想要反序列化的 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,但这并没有改变性能。

我还有哪些其他选择来提高性能?

[编辑] 我需要反序列化创建的对象来执行(基本)转换。XML 是从外部 Web 服务接收的。

4

3 回答 3

3

XmlSerializer 使用反射,因此如果性能是一个问题,则不是最佳选择。

XmlDocument您可以使用或类构建 XML 文档的 DOMXDocument并使用它,或者甚至更快地使用XmlReader. 但是,这XmlReader需要您自己编写任何对象映射(如果需要)。

哪种方法最好取决于您想对 XML 数据做什么。您只是需要提取某些值还是必须工作和编辑整个文档对象模型?

于 2009-02-04T13:28:00.073 回答
2

是的,它确实使用反射,但性能是一个灰色区域。当谈论一个 8mb 的文件时......是的,它会慢得多。但如果处理一个小文件,它就不会。

我不会说读取文件小瓶 XmlReader 或 XPath 会更容易或真的更快。有什么比告诉某些东西将您的 xml 转换为对象或将您的对象转换为 XML 更容易...?不多。

现在,如果您需要细粒度控制,那么也许您需要手动进行。

个人选择是这样的。我愿意放弃一点速度来节省大量丑陋的代码。

就像软件开发中的其他一切一样,也有权衡取舍。

于 2009-02-06T15:46:04.957 回答
1

您可以尝试在“T”类中实现 IXmlSerializable 编写自定义逻辑来处理 XML。

于 2009-05-05T11:23:45.317 回答