.NET应用程序调试—原理、工具、方法(12)

来源:未知 责任编辑:责任编辑 发表时间:2015-05-17 16:44 点击:

HistRoot
HistObj
HistObjFind
HistClear


7.简单示例,常见的线上两类问题

这里我们使用两个小示例直观的感受一下接触.NET运行时状态的感受,尽管真实的问题可能比这个复杂很多,但是解决问题的思路是一样的。

7.1.内存问题(内存偏高,内存溢出)

服务程序最怕的性能问题之一就是内存,当内存很高的情况下我们能够通过对dump文件进行查看,看哪些对象导致内存一直高。当内存一直高的情况下就会容易导致内存溢出异常,甚至是GC频繁的执行,当GC一执行就会导致服务并发下降,因为它要挂起所有的线程(这里指的是服务器模式的.NETCLR,相对应的还有工作站模式的.NETCLR)。

namespace OrderManager
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("app begin...");
            Console.ReadLine();
            List<byte[]> l = new List<byte[]>(); 
            for (int i = 0; i < 9999999; i++)
            {
                byte[] b = new byte[1000]; 
                l.Add(b); 
                Console.WriteLine(i);
            } 
            Console.WriteLine("end begin...");
            Console.ReadLine();
        }
    }
}

这一段代码会一直分配内存直到最后内存溢出异常终止程序,我们在内存比较的情况下来获取一个dump文件,然后通过适当的命令来定位哪个对象占用内存过高。

在不知道对象类型的情况下比较简单的方式就是使用:0:000> !dumpheap -stat,命令,该命令的意思是统计当前堆的信息,在这里就可以一眼找到哪个对象占用多少内存。

0:000> !dumpheap -stat
Statistics:
     MT    Count    TotalSize Class Name

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • 用C#制作屏幕捕获程序
  • 遍历ArrayList易犯错误
  • 使用C#编写LED样式时钟控件
  • C#对XML操作:一个处理XML文件的类(1)
  • 怎样用C#实现完整文档打印功能
  • DataList嵌套问题 如何删除内层子DataList的记录
  • 使用c#+(datagrid控件)编辑xml文件
  • C#生成CHM文件(应用篇)之代码库编辑器(5)【总结、程序、源代码】
  • .NET简谈自定义事务资源管理器
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索 - 移动版 - 返回顶部
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1