【问题标题】:What does dotTrace Performance Profiler mean by [Garbage collection]?[垃圾收集] dotTrace Performance Profiler 是什么意思?
【发布时间】:2010-09-01 13:09:10
【问题描述】:

这张图片中的[垃圾收集]是什么意思?还有“20 个电话”的事情?

我的意思是,我怎样才能弄清楚为什么 GC 花了这么长时间?是不是收集了很多小物件?一个大的?关于如何优化它的任何提示?

有问题的代码是:

private void DeserializeFrom(SerializationInfo info)
{
    Width = info.GetInt32("width");
    Height = info.GetInt32("height");
    var data = (List<byte>)info.GetValue("cells", typeof(List<byte>));
    cells = new Cell[physicalSize.Width, physicalSize.Height];
    int pos = 0;
    for (int x = 0; x < physicalSize.Width; x++)
    {
        for (int y = 0; y < physicalSize.Height; y++)
        {
            cells[x, y] = new Cell();
            if (x < Width && y < Height)
            {
                cells[x, y].HasCar = data[pos];
                pos++;
            }
        }
    }
}

没什么太花哨的。我怀疑罪魁祸首是 List&lt;byte&gt; 大对象,但我认为收集 单个大 对象应该是即时的(而不是收集一堆小对象)。

【问题讨论】:

    标签: .net optimization garbage-collection dottrace


    【解决方案1】:

    如果您想找出导致 GC 的原因、正在分配和收集的对象,您可以通过 dotMemory 来完成。这是一个解释如何优化内存流量的教程:https://confluence.jetbrains.com/display/NETCOM/Tutorial+3+-+How+to+Optimize+Memory+Traffic+with+dotMemory

    【讨论】:

      【解决方案2】:

      晚了一点,但如果您使用的是 .Net,那么您使用的是托管代码,这基本上意味着 .Net 运行时会相应地处理您的对象,因此与 C 或 C++ 相比,您不会出现内存泄漏。

      垃圾收集是运行时需要时间来管理应用程序的内存分配和释放。在这种情况下,这就是正在发生的事情。

      请看一下这个可以与 doTrace 一起使用的过滤器(我有版本 6),以便您可以分析垃圾收集并确定它何时可能会阻止您的执行。 https://www.jetbrains.com/profiler/help/CLR_Activity.html

      【讨论】:

      • 我意识到这已经几个月了,但我觉得值得一提的是,您绝对可以在 .net 代码中出现内存泄漏。静态事件是一个非常常见的原因。如果您使用瞬态订阅静态事件并且在释放对瞬态的所有已知引用之前未能取消订阅该事件,则瞬态将通过静态事件的引用保持活动状态;垃圾收集器永远不会收集它。
      • @kelsie 你是对的,我没有正确表达自己。在过去使用非托管代码进行编程时,您没有内存泄漏,因为很容易简单地不正确地释放对象并发生内存泄漏。同样正如您正确指出的那样,事件是您可以保留对对象的引用以使其不会被释放的一种方式。
      • 当您的应用程序非常密集地使用在 LOH 中分配的数组时,其他可能性是在 4.5 之前的大型对象堆中,并且在您无法压缩 LOH 之前,您可以获得内存不足异常。
      猜你喜欢
      • 2019-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-10
      • 2011-01-15
      • 2011-01-16
      • 2023-03-30
      相关资源
      最近更新 更多