Dotmemory 内存分析工具

教程一、开始学习dotmemory

在本教程中,我们将学习如何运行dotMemory内存快照。此外,我们将简要地看看dotMemory的用户界面和基本分析的概念。考虑dotMemory本教程作为起点

基本条款:

你可能会问:“什么是内存快照和为什么我要学他们?”这是一个很好的时间来达成一些内存分析 您将在本教程中遇到。

从内存的角度来看,应用程序由连续的工作为新对象分配内存和释放内存的对象不再使用的应用程序。对象分配一个接一个地在所谓的托管堆(关于内存管理.net,遵循这个链接)。在此基础上,我们有两个基本操作内存分析器必须能够做:

1、  得到一个内存快照。快照是一个即时托管堆的形象。每个快照包含信息的所有对象,应用程序在内存中分配此刻你点击获取快照按钮。

2、  收集交通信息记忆。交通向您展示多少内存分配内存和释放字节/秒。这个信息也是非常有价值的,因为它允许您了解应用程序的动态执行。

你收集的时间在交通和快照(或者,换句话说,概要文件应用程序)被称为分析会话。
当然,还有其他一些条款,你会熟悉而教程。但是现在这足以理解发生了什么在接下来的几个步骤。让我们开始吧!

内容:

简单应用程序

1、  打开dotmemory

2、  得到一个快照

3、  熟悉快照的概述

4、  内存分析入门

5、  熟悉用户界面

首先,我们需要一个应用程序概要分析。通过一系列dotMemory教程,我们将使用一个用c#编写的应用程序。这模拟典型的康威的游戏生活,你可能知道。(如果不是,请检查维基百科。这不会花费很多时间,但将使更容易理解教程。)所以,在我们开始之前,请下载并解压缩档案与应用。

步骤一、1、运行dotmemory程序

2、  单击Profile按钮并选择我们的生活游戏程序是独立的应用程序。

3、 在分析器配置窗口

a.在应用程序中,指定我们的生活游戏可执行文件的路径。建议您总是概要文件版本构建的应用程序。
b.打开页面上的所有的复选框。我们将更详细地谈论他们在接下来的教程。
这就是窗户应该看起来像在你指定的选项:

4、单击Run启动分析会话。这将运行我们的应用程序并打开dotMemory主要分析页面

步骤二、得到一个快照

一旦应用程序正在运行,我们可以得到一个内存快照。在这个操作中最重要的事情是选择正确的时刻。你记住,一个快照的即时图像应用的托管堆。因此,拍摄快照之前你应该做的第一件事就是把你的应用程序状态你感兴趣。举例来说,如果我们想要看一下创建的对象生活的游戏应用程序启动之后,我们必须得到一个快照在采取任何行动之前应用。相反,如果我们需要知道对象是动态创建的,我们必须采取一个快照后单击“开始”的应用程序。
控制分析过程中,主要dotMemory页面包含一个按钮在页面的顶部。

1、  让我们假设我们需要时分配信息对象生命运行的游戏。因此,在应用程序点击开始按钮,让游戏运行一段时间

2、  单击“Get Snapshot”按钮,得到一个快照信息

3、  关闭游戏程序结束性能分析过程

4、  查看dotMemory。主页现在包含快照的基本信息。

242.34 MB总意味着应用程序消耗242.34 MB的内存。这个尺寸等于Windows任务管理器的私有字节——内存要求的一个过程。总额包括:

a. Unmanaged memory  非托管内存——内存分配在托管堆之外,而不是由垃圾收集器。一般来说,这是所需要的内存.net CLR,动态库、图形缓冲区(特别是大WPF应用程序集中使用图形),等等。这部分内存分析器无法分析。

b. NET Free memory空闲内存——免费托管堆中的内存的数量(不使用的应用程序)。

c. . NET, used 显示为蓝色栏)——使用托管堆中的内存使用的应用程序。这是唯一的一部分记忆。网络允许您处理。出于这个原因,它也是唯一的一部分,你能够分析分析器。

让我们看一看更详细的快照。要做到这一点,点击快照# 1链接。

步骤三、熟悉快照概述

你看到后的第一件事打开快照是快照概述页面。页面显示热点在快照使用一些漂亮的图。

The Largest Size:最大的尺寸图展示的对象类型,消耗内存的主要部分。

The Largest Retained Size:最大的保留尺寸图展示您的关键对象——那些保存在内存中所有其他应用程序中的对象

The Heaps Fragmentation :托管堆的堆Fragmentationdiagram显示了碎片部分:代1、2和大对象堆。
dotMemory自动检查快照最常见类型的内存问题。这些检查的结果检查区域所示,它由一系列的检查:稀疏阵列,事件处理程序泄漏等等。

1、  单击“Largest Size link”, 点击链接的最大尺寸。这将向您展示所有托管堆中的对象。

步骤四、内存分析入门

我们继续下去之前,让我们来一个小绕道和谈论的对象存储在内存中。这是需要更好的理解实际上dotMemory显示。

对象在内存中
主要的部分应用程序所消耗的内存分配给应用程序的对象。对象存储数据和引用其他对象。一个对象及其引用一个对象图。例如,图片类的一个对象将存储id字段(长简单类型)本身和参考其他领域(对象)。

应用程序根
*应用根的表是由运行时处理。
当你的应用程序需要的内存。净的垃圾收集器(GC)决定和删除不再需要的对象。要做到这一点,GC将每个对象的图根*,即静态字段、局部变量和外部处理。如果从任何根对象是遥不可及的,它被认为是不需要从内存中删除。在下面的示例中,D和F对象从内存将被删除,因为他们无法访问应用程序的根。

保留
这里我们来保留的关键概念。
一条从根到一个对象可能会通过许多其他对象。如果所有路径对象B通过对象,然后调用的统治者。换句话说,B是只保留在内存中,如果执行垃圾收集,B也将垃圾收集。这就是为什么每个对象的最重要的参数是保留对象的大小。在dotMemory,这个参数被称为保留字节。例如,在下面的例子中C的对象保留632个字节。对象B不仅仅是保留C;因此,它不包括在计算。

让我们回到dotMemory看看打开类型列表视图。这种观点目前向您展示所有对象在堆中,按他们只保留的内存数量。正如您可以看到的,主要由System.Windows.Shapes保留一部分。椭圆类(很显然,这些都是我们使用可视化的椭圆形状的游戏生活细胞)。该类型的对象保留11868900字节的内存,而消耗3862600字节。

步骤五、熟悉用户界面

1、 请看左边dotMemory窗口的一部分。这是分析路径,显示你所有的调查步骤

每项分析路径是你分析的主题。正如您可以看到的,你开始剖析GameOfLife。exe(步骤1),然后你打开快照# 1(第二步),最后(第三步)你问dotMemory向您展示所有对象在堆中。
即使是一个小小的应用程序创建许多对象,试图分析每个对象分别将不会非常有效。这就是为什么你的分析的主体dotMemory就是所谓的对象集。

对象集是由一个特定的条件选择的对象数。为了便于理解,认为一个对象集的一些查询的结果*(非常类似于SQL查询)。例如,您可以告诉dotMemory类似“选择所有对象由每年的();和提升为创2”,或“选择所有对象在内存中保留通过实例”,等等。

2、 可以从不同的角度检查每个对象集称为视图。查看列表中占据了屏幕的主要部分。类型列表视图,显示了一个简单的列表中的对象集。其他视图可以显示其他信息选择的设置。例如,该集团的绝对主力军视图将显示您保留选择的对象在内存中;该组织通过创建堆栈跟踪视图将显示您什么叫创建了对象,等等

3、 如前所述,每个主题分析可能导致你到另一个话题。例如,我们看到System.Windows.Shapes。椭圆类保留大部分的记忆,我们想知道它实际上保留对象。要做到这一点,打开上下文菜单System.Windows.Shapes.Elipse 对象并选择打开对象保留这组。

4、 这将打开对象集与保留对象的类型列表视图。
你刚才所做的是要求dotMemory”选择所有System.Windows.Shapes.Ellipse类的对象专门聘请的对象”。

分析路径现在包含两个主题:
Elipse.在这一步中,从所有对象,dotMemory 只选择System.Windows.Shapes.Elipse对象

Retained Object。在这一步中,dotMemory显示所有对象System.Windows.Shapes.Elipse聘请的对象
以这种方式,遵循从一个话题转到另一个分析和检查它们在不同的视图,你搬到你的记忆问题的原因。

5、实验dotMemory一点。例如,确定调用源自GameOfLife的对象。细胞类。

Dotmemory 内存分析工具的更多相关文章

  1. Dotmemory 内存分析工具的操作手册

    教程一.开始学习dotmemory 在本教程中,我们将学习如何运行dotMemory内存快照.此外,我们将简要地看看dotMemory的用户界面和基本分析的概念.考虑dotMemory本教程作为起点 ...

  2. .NET内存分析工具-dotMemory

    .NET内存分析工具-dotMemory 1.介绍 官网链接 引言 程序内存占用较大?内存溢出?需要分析生产环境程序怎么办? dotMemory 使您可以分析各种 .NET 和 .NET Core应用 ...

  3. [原创]推荐一款强大的.NET程序内存分析工具.NET Memory Profiler

    [原创]推荐一款强大的.NET程序内存分析工具.NET Memory Profiler 1 官方网站:http://memprofiler.com/2 下载地址:http://memprofiler. ...

  4. JS内存泄漏 和Chrome 内存分析工具简介(摘)

    原文地址:http://web.jobbole.com/88463/ JavaScript 中 4 种常见的内存泄露陷阱   原文:Sebastián Peyrott 译文:伯乐在线专栏作者 - AR ...

  5. Android 内存分析工具 MAT(Memory Analyzer Tool)

    如果使用DDMS确实发现了我们的程序中存在内存泄漏,那又如何定位到具体出现问题的代码片段,最终找到问题所在呢?如果从头到尾的分析代码逻辑,那肯定 会把人逼疯,特别是在维护别人写的代码的时候.这里介绍一 ...

  6. Android内存分析工具DDMS heap + MAT 安装和使用

    一  Java内存分析工具扫盲 如果像我一样一点都不了解,可以先进行内存分析工具扫盲   MAT介绍:     Eclipse Memory Analyzer(MAT)一个功能丰富的 JAVA 堆转储 ...

  7. Lua内存分析工具

    最近给公司写了一个lua内存分析工具,可以非常方便的分析出Lua内存泄露问题,有图形化界面操作,方便手机端上传快照等功能 内存分析我是在c语言端写的,也有人写过lua端的分析工具,也蛮好用的,不过lu ...

  8. Android内存优化(三)详解内存分析工具MAT

    前言 在这个系列的前四篇文章中,我分别介绍了DVM.ART.内存泄漏和内存检测工具的相关知识点,这一篇我们通过一个小例子,来学习如何使用内存分析工具MAT. 1.概述 在进行内存分析时,我们可以使用M ...

  9. Eclipse MAT内存分析工具(Memory Analyzer Tool)

    MAT内存分析工具 MAT是Memory Analyzer的简称,它是一款功能强大的Java堆内存分析器.可以用于查找内存泄露以及查看内存消耗情况.MAT是基于Eclipse开发的,是一款免费的性能分 ...

随机推荐

  1. qt事件机制(转)

    学习了一段时间的Qt之后,发现Qt的事件机制和其他语言的机制有些不同.Qt除了能够通过信号和槽机制来实现一些Action动作之外,还可以用对象所带的事件,或者用户自定义的事件来实现对象的一些行为处理. ...

  2. java 获取对象的数据类型

    // java 获取对象的数据类型 public static String getType(Object object){ String typeName=object.getClass().get ...

  3. Nginx+keepalived 高可用双机热备(主从模式)

    环境:centos7.6 最小化安装 主:10.11.1.32 从:10.11.1.33 VIP:10.11.1.130 修改主节点主机名: hostnamectl set-hostname web_ ...

  4. 使用selenium三种方式打开文件:

    #路径读取方式一:# b.get(r"C:\我的代码\selenium自动化测试\test.html")#路径读取方式二:# b.get("C:\\我的代码\\selen ...

  5. Java LinkedList add vs push

    Java LinkedList add 是加在list尾部. LinkedList push 施加在list头部. 等同于addFirst.

  6. 【洛谷P4093】 [HEOI2016/TJOI2016]序列 CDQ分治+动态规划

    你发现只会改变一个位置,所以可以直接进行dp 具体转移的话用 CDQ 分治转移就好了~ #include <bits/stdc++.h> #define N 100006 #define ...

  7. rustup 使用

    rustup 可以帮助我们安装不同版本的rust 编程需要的工具连,同时可以方便的进行不同版本 之间的切换,类似nodejs 的nvm,n, ruby 的 rvm python 的 venv ... ...

  8. graphql-inspector graphql schema比较&&文档校验&&查找破坏性变动工具

    graphql-inspector 是一个方便的graphql 周边工具,可以加速graphql 应该的开发,同时可以帮助我们排查问题 包含以下特性: 进行schema 的比较 文档校验(通过sche ...

  9. 洛谷 P4316绿豆蛙的归宿

    题目描述 记f[i]表示经过i号点的概率. 那么点v从点u到达的概率=经过点u的概率/点u的出度.由于v可以由多个点走到,所以f[v]+=f[u]/out[u]. 计算f的过程可以在拓扑中完成,同时可 ...

  10. 【loj3119】【CTS2019】随机立方体

    题目 ​ 一个 $ n m l $ 的立方体等概率填入 $ 1-nml $ ; ​ 定义一个位置是极大的当且仅当这个位置比三位坐标的至少一维与之相等的位置的值都大. ​ 询问极大值恰好有\(k\)个的 ...