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的对象。细胞类。

时间: 2024-10-05 04:40:41

Dotmemory 内存分析工具的操作手册的相关文章

Lua内存分析工具

最近给公司写了一个lua内存分析工具,可以方便的分析出Lua内存泄露问题(虽然还没正式使用,但我是这样想的,哈哈哈),有图形化界面操作,方便手机端上传快照等功能 内存分析我是在c语言端写的,也有人写过lua端的分析工具,也蛮好用的,不过lua分析工具本身也会影响到lua的内存占用(尽管用的是弱表缓存的),也会有些不准确. Lua方案:https://github.com/yaukeywang/LuaMemorySnapshotDump 然后找到了云风大神写的C语言解决方案 https://blo

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

原文地址:http://web.jobbole.com/88463/ JavaScript 中 4 种常见的内存泄露陷阱 原文:Sebastián Peyrott 译文:伯乐在线专栏作者 - ARIGATO 链接:http://web.jobbole.com/88463/ 点击 → 了解如何加入专栏作者 了解 JavaScript 的内存泄露和解决方式! 在这篇文章中我们将要探索客户端 JavaScript 代码中常见的一些内存泄漏的情况,并且学习如何使用 Chrome 的开发工具来发现他们.读

Android 中使用内存监测工具Heap,及内存分析工具 MAT

无论怎么小心,想完全避免bad code是不可能的,此时就需要一些工具来帮助我们检查代码中是否存在会造成内存泄漏的地方.Android tools中的DDMS就带有一个很不错的内存监测工具Heap(这里我使用eclipse的ADT插件,并以真机为例,在模拟器中的情况类似).用Heap监测应用进程使用内存情况的步骤如下: 1. 启动eclipse后,切换到DDMS透视图,并确认Devices视图.Heap视图都是打开的: 2. 将手机通过USB链接至电脑,链接时需要确认手机是处于“USB调试”模式

android内存优化之三内存分析工具的使用

 anroid内存分析工具的使用 一.Eclipse Heap分析内存泄露 Android开发中避免不了碰到内存泄露问题,这里先大概讲下内存泄露的基本概念:内存泄露官方的解释是是用动态存储分配函数动态开辟的空间,在使用完毕后未释放,结果导致一直占据该内存单元,直到程序结束.它也可以理解为new的新对象用完后,该对象没有得到回收,造成的无用的对象一直占据着内存,这种无用的随着操作的次数越多,占据的内存越多,直到内存溢出程序,报错停止运行.内存溢出问题比起程序直接报错的问题更难定位,光靠阅读代码来分

Android内存分析工具

Android的一些内存知识 垃圾回收(GC) 垃圾回收包含两个过程: 判定阶段,也就是判断哪些对象可以被回收, 收集阶段,是指具体的回收策略. 判定阶段主要有两种方式 引用计数,对象每多一个引用计数加1,少一个引用计数减1,计数为0时就表示这个对象可以被回收了.但是引用计数有个缺点,不能判断循环应用的情况,所以就有了下面的方式 根搜索,从一些根对象(GCRoot)开始遍历搜索,如果一个对象无法被搜索到,说明这个对象可以被回收了. 可以作为GCRoot的对象: 1 一些虚拟机栈中的对象:2 方法

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

MAT内存分析工具 MAT是Memory Analyzer的简称,它是一款功能强大的Java堆内存分析器.可以用于查找内存泄露以及查看内存消耗情况.MAT是基于Eclipse开发的,是一款免费的性能分析工具.读者可以在http://www.eclipse.org/mat/下载并使用MAT. 1 初识MAT 在分析堆快照前,首先需要导出应用程序的堆快照.在本书前文中提到的jmap.JConsole和Visual VM等工具都可用于获得Java应用程序的堆快照文件.此外,MAT本身也具有这个功能.

Linux 内存分析工具——free命令

在Linux系统经常被用作服务器系统.当服务器内存吃紧的时候,free命令是我们最常使用的内存分析工具. free使用介绍 free命令可以显示Linux系统中空闲的.已用的物理内存及swap内存,及被内核使用的buffer.在Linux系统监控的工具中,free命令是最经常使用的命令之一. free命令使用起来非常简单. # 命令格式 free [参数] # 可选参数 -b 以Byte为单位显示内存使用情况. -k 以KB为单位显示内存使用情况. -m 以MB为单位显示内存使用情况. -g 以

Linux 内存分析工具—free命令

在Linux系统经常被用作服务器系统.当服务器内存吃紧的时候,free命令是我们最常使用的内存分析工具. free使用介绍 free命令可以显示Linux系统中空闲的.已用的物理内存及swap内存,及被内核使用的buffer.在Linux系统监控的工具中,free命令是最经常使用的命令之一. free命令使用起来非常简单. # 命令格式 free [参数] # 可选参数 -b 以Byte为单位显示内存使用情况. -k 以KB为单位显示内存使用情况. -m 以MB为单位显示内存使用情况. -g 以

Linux 内存分析工具的命令大全介绍

在Linux系统经常被用作服务器系统.当服务器内存吃紧的时候,free命令是我们最常使用的内存分析工具. free使用介绍# free命令可以显示Linux系统中空闲的.已用的物理内存及swap内存,及被内核使用的buffer.在Linux系统监控的工具中,free命令是最经常使用的命令之一. free命令使用起来非常简单. Copy # 命令格式 free [参数] # 可选参数 -b 以Byte为单位显示内存使用情况. -k 以KB为单位显示内存使用情况. -m 以MB为单位显示内存使用情况