【问题标题】:Memory usage + .net内存使用 + .net
【发布时间】:2010-10-14 11:44:02
【问题描述】:

.net 2005 ide 中是否有办法找出函数内变量的内存使用情况以及垃圾收集器何时释放它们的内存。

【问题讨论】:

    标签: .net


    【解决方案1】:

    你看过this question,它有几种方法,包括

    System.Runtime.InteropServices.Marshal.SizeOf(...) 
    

    你可以看GC.RegisterForFullGCNotification看看如何看垃圾收集器

    【讨论】:

    • 只返回非托管内存大小,不返回托管大小。
    • 实际上我正在寻找诸如调用堆栈、手表等之类的东西,而不是通过编写代码。 IDE 中是否有任何选项可以跟踪内存分配
    【解决方案2】:

    我不确定你在这里问什么。如果您正在寻找特定对象的内存占用,最好的方法是 WinDbg 和 SOS 扩展。

    http://msdn.microsoft.com/en-us/library/bb190764.aspx

    这可以为您提供有关对象堆的大量信息,包括大小和世代信息。

    这里的这篇文章详细介绍了如何使用 WinDbg 来获取对象图的大小。这可能就是你要找的东西

    http://www.eggheadcafe.com/articles/20060114.asp

    【讨论】:

    • 实际上我正在寻找诸如调用堆栈、手表等之类的东西,而不是通过编写代码。 IDE 中是否有任何选项可以跟踪内存分配
    • @Strike,windbg 是一个调试器,不需要任何代码。目前无法在 IDE 中实际跟踪分配。
    【解决方案3】:

    对于您问题的第一部分:

    您可以使用多种工具来分析应用程序的内存占用量 - 直至单个代码行。我可以推荐以下工具:

    第二部分: .net 中的 GC 不是确定性的。当应用程序没有可用内存时,它会自动调用。没有工具可以告诉您 GC 何时将内存释放回空闲存储区。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-24
      • 1970-01-01
      • 2018-03-26
      • 2011-09-15
      • 2017-10-07
      • 1970-01-01
      • 2010-09-18
      • 1970-01-01
      相关资源
      最近更新 更多