c# - 反序列化 XML 文件的最有效方法是什么

标签 c# performance xml-serialization sgen

你好,

我有一个 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 是从外部网络服务接收的。

最佳答案

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

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

哪种方法最好完全取决于您要对 XML 数据执行的操作。您是只需要提取某些值,还是必须处理和编辑整个文档对象模型?

关于c# - 反序列化 XML 文件的最有效方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/511322/

相关文章:

c# - 在 if 语句中使用位运算

C# 进程无法访问文件,因为该文件正在被另一个进程使用

c++ - L1-cache缓存2KB数据时内存带宽崩溃的原因

java - 当我在 java 中将对象序列化为 XML,然后反序列化它时,我无法在预先存在的内容上使用我的函数。有人能解决这个问题吗?

c# - 流畅的nhibernate Cascade创建新记录而不是更新它们

javascript - 许多 DOM 元素的性能与背景重复

performance - 如何比较没有缓存的 neo4j 查询的性能?

asp.net - 为什么 MSBuild 将 *.XmlSerializers.dll 程序集放在已发布的 Web 应用程序的根文件夹中?

jquery - 使用 jQuery 将 xml 转换为字符串

c# - 如何将WPF页面添加到tabcontrol?