在一个闲置的应用程序中,是什么导致了我的C#NET内存泄漏?

在一个闲置的应用程序中,是什么导致了我的C#NET内存泄漏?,c#,.net,memory,profiler,memory-leaks,C#,.net,Memory,Profiler,Memory Leaks,我正在尝试解决应用程序中的一些内存泄漏问题,我真的希望这里的人能给我一些有帮助的见解。我一整天都在摆弄这个,恐怕我完全被卡住了 我正在排除故障的应用程序最初工作正常,但如果在闲置几个小时后使用,它将变得迟钝,甚至崩溃。我认为这是由于某种内存泄漏,随着时间的推移,这种泄漏越来越严重。据我所知,没有内部进程,例如计时器或无休止的循环等,可以解释内存泄漏,但症状是可重复的,因此肯定发生了一些事情 为了解决这个问题,我下载并安装了.NET内存分析器的试用版。然而,不幸的是,我真的不知道如何解释我得到的结

我正在尝试解决应用程序中的一些内存泄漏问题,我真的希望这里的人能给我一些有帮助的见解。我一整天都在摆弄这个,恐怕我完全被卡住了

我正在排除故障的应用程序最初工作正常,但如果在闲置几个小时后使用,它将变得迟钝,甚至崩溃。我认为这是由于某种内存泄漏,随着时间的推移,这种泄漏越来越严重。据我所知,没有内部进程,例如计时器或无休止的循环等,可以解释内存泄漏,但症状是可重复的,因此肯定发生了一些事情

为了解决这个问题,我下载并安装了.NET内存分析器的试用版。然而,不幸的是,我真的不知道如何解释我得到的结果。据我所知,在我看来问题最大的类是系统类,比如system.Version和system.Object[]。我认为这是基于一个假设,即“要查找的数据”是探查器报告的无法访问的实例和字节数

以下是一些示例数据,与我看到的类似:

  • 名称空间:系统
    • 类名:版本
    • 实时实例
    • 总数:2
    • 增量:0
    • 活动字节
    • 总数:48
    • 新:48
    • 最高:24
    • 增量:0
    • 遥不可及的
    • 实例:15556
    • 字节:373344
  • 名称空间:系统
    • 类名:对象[]
    • 实时实例
    • 总数:1198
    • 增量:0
    • 活动字节
    • 总数:117916
    • 新:117916
    • 最高:7016
    • 增量:0
    • 遥不可及的
    • 实例:3054
    • 字节:204592
  • 如果我读对了这篇文章,我面临的两个最大的问题是,我有15000多个汇编版本的实例和3000多个“不可访问”的对象,尽管我不确定“不可访问”是什么意思

    因此,我的具体问题如下:

    • 有人能告诉我是否正确读取了.Net内存分析器数据吗
    • 如果我正确读取了数据,那么在没有最终用户与我的应用程序交互的情况下,是什么导致我的应用程序生成更多的程序集版本实例和更多的对象实例

      • 没有任何真正的证据表明你发布的内容存在任何泄漏。垃圾收集器已经有一段时间没有运行了,这在空闲程序上是正常的。那些未收集的对象占用的0.5 MB是微不足道的

        当一个程序空闲一段时间时,它的虚拟内存页将被交换到分页文件。当它重新获得焦点时,这些页面需要重新交换。当机器陈旧时,这可能需要一段时间。真正的问题很可能是磁盘碎片,特别是在分页文件上

        你应该能够从硬盘访问指示灯中分辨出来,它应该会疯狂地闪烁。您还可以从TaskMgr.exe的“进程”选项卡中判断。查看并选择列,勾选页面错误增量。恢复程序窗口后,该数字应在一秒钟或更短时间内变为零


        整理磁盘碎片。尤其是分页文件,这很难做到。在superuser.com上询问相关问题

        你有没有尝试过,虽然它非常缓慢,只是按了几次暂停按钮?幸运的是,这会告诉你它在考虑什么。这里没有内存泄漏的真正证据。我怀疑你最初的假设是有缺陷的。有一个叫做pagedefrag的实用程序可以对分页文件进行碎片整理…它很好,但已经有一段时间没有更新了。例如,在Win7中不起作用。