XmlSerializer extraTypes 内存泄漏

2023-12-03

我正在开发一些应用程序,它使用 extraTypes 参数调用大量 XmlSerializer 构造函数。我发现,每次调用都会增加大约 100KB 的应用程序内存和 2 个描述符(有时更多)。 代码示例:

此代码将应用程序内存增加 100KB,每次调用增加 2 个处理程序

while (true)
            {
                Console.ReadLine();
                new XmlSerializer(typeof (object), new Type[] {});
            }

此代码增加了 43024KB 和 2004 个处理程序的应用程序内存

 for (var i = 0; i < 1000; i++)
            {
                new XmlSerializer(typeof (object), new Type[] {});
            }

这只是控制台应用程序最简单的示例:

internal class Program
    {
        private static void Main(string[] args)
        {
            //this code encrease application memory for 43024KB and 2004 handlers
            for (var i = 0; i < 1000; i++)
            {
                new XmlSerializer(typeof (object), new Type[] {});
            }
            Console.WriteLine("Finished. Press any key to continue...");


            Console.ReadLine();
        }
    }

这是 XmlSerializer 中的错误还是我做错了什么?

附注与优化代码和发布构建相同


好的,msdn上已经有答案了https://blogs.msdn.microsoft.com/tess/2006/02/15/net-memory-leak-xmlserializing-your-way-to-a-memory-leak/

答案是:不,这不是一个错误,而是一个功能;)

XmlSerializer 每次调用带有 extraTypes 参数的构造函数时都会创建一个 TempAssembly。并且“程序集不是 GC 堆上的对象,GC 实际上不知道程序集,因此它不会被垃圾收集”

解决方案是将 XmlSerializer 缓存在某个字典中,并且每种类型仅使用一个对象,而不是每次需要时创建新的 XmlSerializer

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

XmlSerializer extraTypes 内存泄漏 的相关文章

随机推荐

  • 使用 HTML5 设置视频播放时长

    我有一个使用 TimeJump js 的简单 HTML5 视频播放器 http davatron5000 github io TimeJump 以允许直接跳转到特定时间代码 IE 跳转到视频的第 25 分钟 我想添加对视频播放时长的限制 因
  • 上传文件[重复]

    这个问题在这里已经有答案了 可能的重复 如何在网页上实现文件上传进度条 Hello 我见过很多网页 用户可以上传文件 并且会得到某种进度作为视觉反馈 水平条 百分比等 我的 html 表单是
  • 通过连接传播 pandas 系列元数据

    我希望能够将元数据附加到一系列数据帧 特别是原始文件名 以便在加入两个数据帧后我可以看到有关每个系列来自何处的元数据 我看到 github 问题有关 metadata here here 包括一些与当前相关的 metadata属性 here
  • 从 .odt 文件填充 QTextDocument

    我正在使用 C 和 Qt 编写一个富文本编辑器 目前 我希望它支持 至少 odt 格式 我发现 QTextDocumentWriter 用于将 QTextDocument 的内容写入文件 但我似乎找不到任何东西可以将其读回到 QTextDo
  • 从类外部访问类属性

    假设我有以下课程 class MyClass public function Talk Say Something return Say 然后我启动了该类的一个实例 Inst new MyClass 现在 我如何在 MyClass 之外调用
  • Pandas 非常简单 分组总大小的百分比

    我在看似极其简单的操作中遇到了麻烦 通过诸如此类的操作从组中获取总数百分比的最简洁方法是什么df groupby col1 size 分组后我的 DF 看起来像这样 我只想要总数的百分比 我记得过去使用过此语句的变体 但现在无法使其工作 p
  • PHP 短标签可以使用吗?

    这是信息根据官方文档 有四对不同的 可以是开始和结束标签 在 PHP 中使用 其中两个 and 随时可用 另外两个 是短标签和 ASP 样式标签 并且 可以从打开和关闭 php ini 配置文件 像这样 虽然有些人发现短标签并且 ASP风格
  • 如何防止过度打字

    我正在尝试用 C 制作一个简单的聊天应用程序 它可以工作 但是 如果有人在其他人打字时输入某些内容 它就像写了他们正在输入的内容 我链接了图片作为下面的示例 我用于客户端和服务器的代码可以在这里找到 Client Server 图片 Bef
  • Python:获取插入符位置[关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我正在尝试获取 Python 中的插入符号位置 我尝试使用win32gui GetCaretPos 但它总是返回 0 0 您有什么想法让它发挥作用吗 谢谢 克里斯 如果插入符号位于另
  • 在 C# 中显示数据库中列表框中的项目

    我有一个包含两个表的数据库Countries and Websites 我使用以下语句显示 listbox1 中的所有国家 地区名称 try connection Open using OleDbCommand command new Ol
  • Php 西里尔字符串长度加倍其值

    你好 这是问题所在 当我到达 POST 拉丁字符串 strilen 时效果很好 但是当我到达西里尔字符串 strlen 时其值加倍 这里是代码 word POST word echo strlen word br input abc gt
  • 使用 Eval 在 TemplateField 中显示毫秒

    我有一个提交的模板 如下所列 我还需要显示日期时间的毫秒部分 我读过有关dateValue ToString fff 格式为http msdn microsoft com en us library bb882581 aspx How to
  • iPhone 版的PasswordDeriveBytes(.net 2.0)

    我想在iPhone中使用 NET 2 0的PasswordDeriveBytes RSA PBKDF1 我怎样才能实现同样精确的实现 有没有相关的方法或库 我特别想要它使用盐 Thanks 由于 MS 实现并不完全遵循 PKCS 5 规范
  • android 画廊进入网格样式菜单

    大家好 请帮我解决有关 android 中的菜单的问题 我想将此画廊作为我的应用程序的网格菜单 请指导我如何将名称放在图像下方 如果我单击特定图像 则应打开新活动 最后单击菜单按钮将我带回主屏幕 here is the image 这是代码
  • 当服务器使用 pm2 重新启动时启动 Node JS 应用程序

    我正在尝试使用该模块pm2每次服务器启动时启动我的 Node js 应用程序 我已经使用了命令pm2 startup ubuntu但每次我重新启动服务器时 我的应用程序都没有运行 我必须再次手动启动它 有什么想法导致这个问题吗 确保保存您的
  • Windows 7 中管理员用户的 SQL Server 2008 数据库引擎登录失败 [已关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我从 sadegh 用户在 Windows 7 Ultimate 上安装了 SQL Server 2008 Enterprise Edition 该帐户以管理员角色存在 几天后 我从
  • Java - 如何将我的 ArrayList 写入文件,并将该文件读取(加载)到原始 ArrayList?

    我正在用 Java 编写一个程序 它显示一系列课后俱乐部 例如足球 曲棍球 由用户输入 俱乐部被添加到以下ArrayList private ArrayList
  • 根据特定列标题提取 HTML 表 - Python

    我正在尝试从以下内容中提取 html 表URL 例如 第 44 页的 2019 年董事薪酬表 我相信该表没有特定的 id 例如 薪酬表 等 要提取该表 我只能想到匹配的列名称或关键字 例如 股票奖励 或 所有其他补偿 然后抓取关联的表 有没
  • 使用 SweetAlert2 替换 ASP.Net 按钮上的“返回确认()”

    在 ASP Net 中工作时 我经常喜欢问 你确定吗 单击删除按钮等内容时会弹出窗口 这很容易完成 如下所示
  • XmlSerializer extraTypes 内存泄漏

    我正在开发一些应用程序 它使用 extraTypes 参数调用大量 XmlSerializer 构造函数 我发现 每次调用都会增加大约 100KB 的应用程序内存和 2 个描述符 有时更多 代码示例 此代码将应用程序内存增加 100KB 每