体验VisualStudio 2013中的内存分析功能

转自:http://www.cnblogs.com/TianFang/p/3351527.html

文章内部图片请参考原文


内存分析一直是个比令人痛的问题VisualStudio 2013中就集成了一个内存分析的功能,可以方便我们进行分析内存的占用情况。本文将简单的介一下如何使用个功能

首先以一个简单的程序例:

    class MyObj
    {
        
byte[] data;

        
public MyObj()
        {
            data = 
new byte[10240];
        }
    }

    
static void Main(string[] args)
    {
        
var buffer = new List<MyObj>();

        
for (int i = 0; i < 1000; i++)
        {
            buffer.Add(
new MyObj());
        }

        
Console.ReadLine();
    }

个程序比较简单,启候申1000MyObj象,每个象占用10k内存,一共占用10m

要分析个程序的内存占用,首先我需要将其内存dump出来,里推荐用ProcDump,可以在微的网站。使用方式如下:

    procdump.exe -ma ConsoleApplication1.exe test.dmp

过这个命令,就可以将程当前的内存情况dump出来,生成一个名test.dmpdump文件。然后,我就可以用VisualStudio 2013直接打开dump文件了。

    

"调试托管内"存按开始分析内存,便可以非常清晰的看到内存的占用分布。

另外,它有一个非常心的功能,可以比两个dump文件的内存差异:

体感觉这个功能是非常好用的,限于篇幅,里就不做更多的介了,要更深入的学习这个功能的可以看看篇文Using Visual Studio2013 to Diagnose .NET Memory Issues in Production

,有一个问题是,个功能集成在VisualStudio中了,如果要分析现场遇到的问题时,可能现场的机器中是没有VisualStudio的,需要把dump文件送会来分析,但很多现场的是没有通互网,或者是一个带宽较窄的专线的,dump文件又大而传输不便,如果能把个功能独立出来就好了。

好在微布了一个名ClrMD 独的可以分析程和dump文件的内存占用,通它我可以写一个分析程序:

    var stats = from in heap.EnumerateObjects()
                
let t = heap.GetObjectType(o)
                
group by into g
                
let size = g.Sum(o => (uint)g.Key.GetSize(o))
                
orderby size
                
select new
                {
                    Name= g.Key.Name,
                    Size= size,
                    Count= g.Count()
                };

    
foreach (var item in stats)
        
Console.WriteLine("{0,12:n0} {1,12:n0} {2}", item.Size,item.Count, item.Name);

库还在开发阶段,我使用了一下,老报错,也没有找到原因。里就不做多介了,等正式版布后再独写篇文章体下。感趣的朋友可以看看文章

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值