首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XmlSerializer缓存工厂

XmlSerializer缓存工厂
EN

Stack Overflow用户
提问于 2014-01-30 22:30:54
回答 1查看 3.1K关注 0票数 1

如果我想替换下面的偶然发现一个工厂的班级代码,我和我都不确定如何使用它。

样本模型

代码语言:javascript
复制
public class SampleData
{
    public string Name { get; set; }
    public string Country { get; set; }
}

现有代码

代码语言:javascript
复制
List<SampleData> objects = new List<SampleData>();
objects.Add(new SampleData() { Country = "Australia", Name = "aus" });

StringWriter writer = new StringWriter();

XmlSerializer serializer = new XmlSerializer(typeof(List<SampleData>));
serializer.Serialize(writer, objects);

工厂级

代码语言:javascript
复制
public static class CachingXmlSerializerFactory
{
    private static readonly Dictionary<string, XmlSerializer> Cache = new Dictionary<string, XmlSerializer>();

    private static readonly object SyncRoot = new object();

    public static XmlSerializer Create(Type type, XmlRootAttribute root)
    {
        if (type == null) throw new ArgumentNullException("type");
        if (root == null) throw new ArgumentNullException("root");

        var key = String.Format(CultureInfo.InvariantCulture, "{0}:{1}", type, root.ElementName);

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

        return Cache[key];
    }

    public static XmlSerializer Create<T>(XmlRootAttribute root)
    {
        return Create(typeof(T), root);
    }

    public static XmlSerializer Create<T>()
    {
        return Create(typeof(T));
    }

    public static XmlSerializer Create<T>(string defaultNamespace)
    {
        return Create(typeof(T), defaultNamespace);
    }

    public static XmlSerializer Create(Type type)
    {
        return new XmlSerializer(type);
    }

    public static XmlSerializer Create(Type type, string defaultNamespace)
    {
        return new XmlSerializer(type, defaultNamespace);
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-30 23:05:42

重读文章引用的MSDN部分。您已经在使用缓存内部序列化程序的两个构造函数之一,因此不会导致内存泄漏。如果您使用的是其他构造函数之一,则需要担心缓存XmlSerializer,但您没有。没必要修补没坏的东西。;-)

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21468822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档