教程一、开始学习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. Lua内存分析工具

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

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

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

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

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

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

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

  7. android--------Eclipse中ddms heap内存分析工具

    无 论怎么小心,想完全避免bad code是不可能的,此时就需要一些工具来帮助我们检查代码中是否存在会造成内存泄漏的地方. Android tools中的DDMS就带有一个很不错的内存监测工具Heap ...

  8. android--------Android内存分析工具的使用

    内存分析(in-memory analytics)是我们编写速度快.效率高的代码必不可少的知识.如果自己编写的代码在内存的分配一无所知,我想这样的程序让你去优化,应该是无从下手的.那么内存分析是什么? ...

  9. 【Java线程与内存分析工具】VisualVM与MAT简明教程

    目录 前言 VisualVM 安装与配置 本地使用 远程监控 MAT 使用场景 安装与配置 获得堆转储文件 分析堆转储文件 窥探对象内存值 堆转储文件对比分析 总结 前言 本文将简要介绍Java线程与 ...

随机推荐

  1. Linux 文件基本属性: chown修改所属组 和 chmod修改文件属性命令

    [root@www /]# ls -l total 64 dr-xr-xr-x 2 root root 4096 Dec 14 2012 bin -rwxrwxr-x 4 root root 4096 ...

  2. 开始编写Makefile(二)Makefile变量的使用

    Makefile可以使用变量代替 命令行:make -f Makefile2 说明开始make一个名为Makefile2的文件 ###############定义变量################# ...

  3. C函数指针数组的定义和使用

    1.使用函数指针数组来实现计算器 2.通过函数指针变量来调用对应的函数 #include <stdio.h> int add(int a,int b){ return a+b; } int ...

  4. (2)Angular的开发

    什么是 ReactNative应用, 小程序与RN的关系 native端优化 Js端优化 ReactNative是? 用JavaScript来写App,性能好 异步编程 请点赞!因为你的鼓励是我写作的 ...

  5. 第02组 Alpha冲刺(2/6)

    队名:無駄無駄 组长博客 作业博客 组员情况 张越洋 过去两天完成了哪些任务 任务分配.进度监督 提交记录(全组共用) 接下来的计划 沟通前后端成员,监督.提醒他们尽快完成各自的进度 还剩下哪些任务 ...

  6. JDK提供的原子类原理与使用

    原子更新基本类型 原子更新数组 原子更新抽象类型 原子更新字段 原子更新基本类型: package com.roocon.thread.t8; import java.util.concurrent. ...

  7. Linux远程传输文件免密码

    首先为什么Linux远程传输要免密码?手动使用scp命令传输每次都要输密码太过麻烦了. 开发中有一句话,能复制粘贴尽量不要手打. 运维中有一句话,能脚本化实现尽量不要手动执行. 远程传输文件免密码的目 ...

  8. CentOS安装相应版本的内核源码

    昨天接到同事给安排的新任务,测试系统性能:网上查了些资料,目测perf功能很强大,而且是内核源码自带的,编译安装即可使用:看了下自己的虚拟机,没有内核源码,好吧,装一个: 查看一下系统版本: #cat ...

  9. Leet Code 1.两数之和

    给定一个整数nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标. 可以假设每种输入只会对应一个答案.但是,不能重复利用这个数组中同样的元素. 题解 提交代 ...

  10. DELPHI开发LINUX的动态库

    DELPHI开发LINUX的动态库 WINDOWS的动态库是.dll,这个大家都知道. LINUX也有动态库,扩展名是.so,现在DELPHI也能开发LINUX的动态库哦. DELPHI对LINUX的 ...