使用VS的性能分析工具来分析代码的性能瓶颈问题(2) 内存使用率

勇哥注:
一般我们通过使用windows的任务管理器来分析软件的性能问题。
通过cpu占用率、cpu时间、线程数量、句柄数量几个关键参数来分析软件存在的内在泄露、
暴句柄、吃cpu等等问题。
这里我们来研究一下vs自带的性能分析工具,勇哥之前也没有接触过。
因此此篇我与大家共同学习。


这一篇讲“内存使用率”工具。


先提供一段存在内存泄露的代码。

  private void button2_Click(object sender, EventArgs e)
        {

            int it = (20000 * 100);
            for (int i = 0; i < it; i++)
            {
                p.ProcessTransaction(new Customer(Guid.NewGuid().ToString()));
            }

        }

 class Customer
    {
        private string id;

        public Customer(string id)
        {
            this.id = id;
        }
    }

    class CustomerCache
    {
        private List<Customer> cache = new List<Customer>();

        public void AddCustomer(Customer c)
        {
            cache.Add(c);
        }
    }

    class Processor
    {
        private CustomerCache cache = new CustomerCache();

        public void ProcessTransaction(Customer customer)
        {
            cache.AddCustomer(customer);
        }
    }


image.png


点”开始“后,走到断点1处,取一张用于比较的内存印象快照。


image.png


image.png


拍好快照后如下图所示。

image.png

然后把程序跑起来,在另一处断点处,即在你认为已经出现内存泄漏的时刻,再拍一张快照。



以上过程也可以使用“诊断工具”来完成,它要更方便一些。

image.png

image.png


此时如果内存有变化,如果是增量,则是红色向上的箭头。

image.png


先点第一个快照,“对象(差异)”,蓝色数字 1199

然后,“与之对比的对象:”选择“快照#2"。

image.png

排序后,显示如下:

image.png


说明:


1.可以与其他的快照对比查看增加或减少了那些对象和大小

2.下部分的“根的路径”树显示引用上部分选中的对象,只有当引用某个对象的最后一个类型已经释放时,垃圾回收器才会清理该对象的内存

3.“引用的类型” 树显示持有上部分选中对象的引用

4.如果想看选中类型的实例则可以点击下图的图标

image.png


image.png



不过,使用此工具,勇哥发现很难定位到类似于巨量字符串拼接这样的问题代码上去。

也许还没有应用熟悉吧。

image.png

可以看到,仅定位到增量是string类型数据造成的。

image.png

如果看实例,则能显示出string的地址,但是无法看到其它信息。

image.png




2022/11/17勇哥注:


vs的此工具有个问题,就是取分析报表时总是需要无休止的加载符号。

造成生成报告很慢。

image.png


解决办法:

进入VS---工具---选项----调试----符号,看右边有个“Microsoft符号服务器”,将前面的勾去掉,(可能还有删除下面的那个缓存)。然后就不会在调试时加载了。

image.png


--------------------- 

作者:hackpig

来源:www.skcircle.com

版权声明:本文为博主原创文章,转载请附上博文链接!


本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2024年5月    »
12345
6789101112
13141516171819
20212223242526
2728293031
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864