当前位置: 首页 > news >正文

C# XML XmlSerializer 序列化缓存

XmlSerializer 的构造函数开销非常大(涉及反射和动态代码生成),如果每次序列化都新建实例,性能会急剧下降。

 

/// <summary>
/// XmlSerializer 工厂,用于缓存实例以提高性能。
/// XmlSerializer 构造函数开销极大(生成临时程序集),必须缓存。
/// </summary>
public static class XmlSerializerFactory
{// .NET 4.8 原生支持 Tuple,无需引入 ValueTuple NuGet 包private static readonly ConcurrentDictionary<Tuple<Type, XmlAttributeOverrides>, XmlSerializer> _cache= new ConcurrentDictionary<Tuple<Type, XmlAttributeOverrides>, XmlSerializer>();/// <summary>/// 获取指定类型的序列化程序/// </summary>/// <param name="type">类型</param>/// <param name="overrides">重写属性(可选)</param>/// <returns>序列化程序实例</returns>public static XmlSerializer GetSerializer<T>( XmlAttributeOverrides overrides = null){Type type = typeof(T);if (type == null)throw new ArgumentNullException(nameof(type));// 使用 .NET 4.8 原生的 Tuple 作为复合 Key// Tuple.Create 会处理 null 值var key = Tuple.Create(type, overrides);return _cache.GetOrAdd(key, k =>{// 只有在缓存未命中时才执行这里的逻辑return new XmlSerializer(k.Item1, k.Item2);});}
}

 

 

使用

 // 1. 基础使用(无重写)var ser1 = XmlSerializerFactory.GetSerializer<Person> ();// 2. 高级使用(带重写 - 注意复用 overrides 实例)var overrides = new XmlAttributeOverrides();// 假设这里配置了属性...var ser2 = XmlSerializerFactory.GetSerializer<Person>();var ser3 = XmlSerializerFactory.GetSerializer<Person>();// ser2 和 ser3 是同一个实例(来自缓存)var t = ser2.Equals(ser3);//结果是true

 

http://www.jsqmd.com/news/365914/

相关文章:

  • 分析昆明可靠的智慧农贸集市,盛鲜智慧集贸值得选 - 工业品网
  • 实用指南:C++ 面向对象三大特性之一---多态
  • 气体在线监测系统采购指南:四大优质工厂深度测评(2026.2) - 品牌推荐大师1
  • 散白酒哪个地方的好,聊聊四川泸州川红高粱酒的独特魅力 - myqiye
  • 2026 嘉兴英语雅思培训教育机构推荐,雅思培训课程中心权威口碑榜单 - 老周说教育
  • 说说全国阶梯护坡厂家,哪家质量好 - 工业品牌热点
  • 2026 太原英语雅思培训教育机构推荐;雅思培训课程中心权威口碑榜单 - 老周说教育
  • 2026 徐州英语雅思培训教育机构推荐;雅思培训课程中心权威口碑榜单 - 老周说教育
  • 年末闲置支付宝红包套装别浪费!这样处理轻松变现 - 团团收购物卡回收
  • 对程序编译与链接
  • 南昌冷轧带肋钢筋设备选购,这些大型厂家值得考虑 - mypinpai
  • 2026 太原英语雅思培训教育机构推荐,雅思培训课程中心权威口碑榜单 - 老周说教育
  • 北京留学中介排名TOP10:同步全球前沿资讯助力申学之路 - 博客湾
  • 2026 广州英语雅思培训教育机构推荐|雅思培训课程中心权威口碑榜单 - 老周说教育
  • AI搜索时代必看:国内做GEO优化的头部公司有哪些?权威推荐清单 - 品牌推荐大师1
  • 2026 廊坊英语雅思培训教育机构推荐,雅思培训课程中心权威口碑榜单 - 老周说教育
  • 2026光电开关优质厂家推荐 适配多工业场景 - 资讯焦点
  • BXMya 216VC62A/P1000 HESG324442R112 模拟输入模块
  • 2026爆火AI论文工具榜单|避开智商税,这几款免费工具本科生闭眼冲
  • 数字时代别让权益闲置:支付宝红包套装的正确打开方式 - 团团收购物卡回收
  • GitLab 中的 System Hook(系统钩子) 和 Project Webhook(项目 Webhook)的区别
  • 如何选择医疗器械第三方机构?口碑 + 实力双考量选择指南! - 速递信息
  • Typora绘制-时间线图
  • 哪家做医疗器械第三方比较好?值得信赖的服务商推荐清单! - 速递信息
  • 高效率与高密度的平衡:浅析小型化DC-DC电源模块的技术实现路径
  • 工业耐用传感器厂家 多场景多电压适配 - 资讯焦点
  • 全面解读:液氮罐行业优质品牌与实力生产商倾情推荐 - 品牌推荐大师
  • 2026 惠州英语雅思培训教育机构推荐:雅思培训课程中心权威口碑榜单 - 老周说教育
  • 申留学选留学机构找对家!南京十大留学机构实力顶 - 博客湾
  • vLLM 并行推理参数及技术实现原理