指定 XmlRootAttribute 时的 XmlSerializer 性能问题

2024-02-26

我目前遇到一个非常奇怪的问题,我似乎不知道如何解决它。

我有一个fairly我正在尝试使用 XmlSerializer 类对其进行序列化的复杂类型。这实际上运行良好并且类型序列化正确,但似乎需要一个very长时间这样做;大约 5 秒,具体取决于对象中的数据。

经过一些分析后,我奇怪地缩小了问题范围,以在调用 XmlSerializer.Serialize 时指定 XmlRootAttribute。我这样做是为了将正在序列化的集合的名称从 ArrayOf 更改为更有意义的名称。一旦我删除参数,操作几乎是即时的!

任何想法或建议都会很好,因为我完全被这个问题难住了!


仅供遇到此问题的其他人使用;有了上面的答案和来自 MSDN 的示例,我设法使用以下类解决了这个问题:

public static class XmlSerializerCache
{
    private static readonly Dictionary<string, XmlSerializer> cache =
                            new Dictionary<string, XmlSerializer>();

    public static XmlSerializer Create(Type type, XmlRootAttribute root)
    {
        var key = String.Format(
                  CultureInfo.InvariantCulture,
                  "{0}:{1}",
                  type,
                  root.ElementName);

        if (!cache.ContainsKey(key))
        {
            cache.Add(key, new XmlSerializer(type, root));
        }

        return cache[key];
    }
}

然后,我不使用采用 XmlRootAttribute 的默认 XmlSerializer 构造函数,而是使用以下内容:

var xmlRootAttribute = new XmlRootAttribute("ExampleElement");
var serializer = XmlSerializerCache.Create(target.GetType(), xmlRootAttribute);

我的应用程序现在再次执行!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

指定 XmlRootAttribute 时的 XmlSerializer 性能问题 的相关文章

随机推荐