教程3 -如何与dotmemory内存优化交通
在本教程中,我们将看到如何使用dotmemory优化你的应用程序的内存使用情况。
我们所说的什么“优化内存使用”?像在任何操作系统的过程中,垃圾收集(GC)消耗系统资源。逻辑很简单:更多的藏品GC已作出,较大的CPU开销和贫穷的应用性能。通常,这发生在你的应用程序分配大量的是时间有限的时期需要的对象。
识别和分析这些问题,你应该检查所谓记忆交通。交通信息显示你有多少个对象(记忆)被分配和选定的时间期间被释放。
让我们看看如何确定您的应用程序的过度分配和摆脱他们使用dotmemory。
目录
示例应用程序
步骤1。使用性能分析器
步骤2。得到的快照
步骤3。分析记忆交通
传统上,该示例应用程序将使用本教程是康威的生命游戏。在你开始之前,请下载并解压这个压缩包的应用。
随着大量的对象的应用程序(细胞),就看如何将这些对象被分配和收集有趣的动力学。
步骤1。运行剖面
1。打开在Visual Studio解决游戏人生。
2。使用菜单dotmemory |剖面启动项目运行dotmemory。
这将打开系统配置窗口。
1. 在探查器配置窗口:
在实际应用中,指定我们生命的释放游戏构建路径。
打开收集每n个对象在创建堆栈跟踪类别。这将创造的堆栈跟踪信息记录。我们需要此信息来确定哪些调用创建对象。
打开记忆的交通类收集。这将打开记忆的交通信息记录。
打开开始分析立即创造堆栈跟踪和内存的流量类别。这会告诉dotmemory开始收集这些信息在应用程序启动。
这就是窗户看起来应该像你指定的所有选项后:
4。单击“运行”开始分析会话。这将启动我们的应用程序和打开dotmemory主要分析页:
5。切换到dotmemory主窗口看到的时间表。时间线显示你的应用程序在实时内存使用。更具体地说,它提供了对非托管内存*,电流的大小细节0代,代,第二代和大对象堆成堆。直到生命的游戏开始,内存消耗是静止的:
步骤2。得到的快照
应用程序启动后,我们可以开始内存快照。我们想了解如何我们的应用程序的行为的动力,我们需要至少两个快照。得到的快照之间的时间将是进一步的内存的流量分析的主题。
当然,快照必须考虑人生的游戏操作部分的分配主要发生在当。我们在游戏中的第三十代以一个快照,并在第二个第一百代。
1. 使用“开始”按钮开始游戏中的应用。
2、(在我们的应用程序的右上角)达到30×,点击进入dotmemory快照按钮。
如果你看看现在的时间表,你会看到如何应用程序消耗的实时内存。当应用程序分配新的对象,内存消耗增加(0代图增长)。当垃圾收集发生,内存消耗降低。作为一个结果,时间如下一个锯状图案。
- 当代计数器达到100,得到一个快照,再利用得到的dotmemory快照按钮。
4。通过关闭应用程序的生命游戏结束分析会话。
主页包含两个快照:
步骤3。分析记忆交通
现在,我们将得到的快照之间的时间记忆的交通一看。
1。单击“添加到每个快照添加到比较区域比较。为了在你添加快照并不重要,因为dotmemory总是使用旧的快照作为比较基础:
2。点击查看内存的流量在比较:
这将打开查看流量。查看当前显示我们多少某种类型的对象之间创建快照和快照# # 1 2。
3. 采取看看列表。23 MB的,或关于内存的整体流量的50%,是由于细胞的类对象分配*。同时,大多数这些细胞–22.7 MB–以及收集。这很奇怪,因为细胞应该对任何游戏人生的整个持续时间的存在。毫无疑问,这些收藏品伤害我们的应用程序的性能。
让我们检查一下这些细胞的对象从哪里来。
4。单击“行与gameoflife细胞类:
该屏幕底部的列表显示功能(回溯),创建的对象。显然,这是calculatenextgeneration网格类方法。让我们在代码中找到它。
5。在Visual Studio中打开gameoflife溶液。
6。打开包含网格课实施grid.cs文件:
7。找到calculatenextgeneration(int排列,int)方法:
看来,这种方法计算并返回游戏的每一个生命的下一代细胞的对象。但这不能解释高内存交通。让我们回到dotmemory找出函数调用的calculatenextgeneration方法。
8。在dotmemory,扩大calculatenextgeneration方法查看堆栈中的下一个函数。
Grid 类的Update方法
9。在代码中找到这个方法:
本文最后揭示我国高内存交通的原因。有了单元类型存储游戏人生的下一代细胞的nextgenerationcells阵列。在每一代更新,此数组中的细胞用新的替换。从上一代留下的细胞不再需要收集一定时间后得到的气相色谱法。
显然,没有必要把nextgenerationcells数组中的每个时间作为应用程序的整个生命周期过程中存在着新的细胞阵列。摆脱高内存的交通,我们仅仅需要而创造新的细胞的新值更新现有的电池性能。让我们在代码中做这个。
10。实际上,我们的程序是一个学习的例子,它已经包含了所需要的calculatenextgeneration方法的实现。此方法更新单元格的IsAlive和年龄的领域进行引用发送:
为了解决这个问题,简单地取消在update()更新nextgenerationcells阵列使用这种方法的线。最后,该update()方法
现在,让我们应用这些更改并检查它们如何影响记忆的交通。
11.建立应用程序再一次。重复步骤1步骤。运行剖面和步骤2。要得到两个新的快照的快照。
12。开放交通的角度去看收集快照之间的记忆的交通(如子步骤1和2步骤3的方法。分析记忆交通):
该gameoflife。细胞类不再是名单上的!这导致在整体流量下降35%(34 MB),这是一个很好的优化。
教程3 -如何与dotmemory内存优化交通的更多相关文章
- iOS高级教程:处理1000张图片的内存优化
一.项目需求 在实际项目中,用户在上传图片时,有时会一次性上传大量的图片.在上传图片前,我们要进行一系列操作,比如:旋转图片为正确方向,压缩图片等,这些操作需要将图片加载到内存中,下面对内存的使用做详 ...
- Dotmemory 内存分析工具
Dotmemory 内存分析工具 教程一.开始学习dotmemory 在本教程中,我们将学习如何运行dotMemory内存快照.此外,我们将简要地看看dotMemory的用户界面和基本分析的概念.考虑 ...
- Dotmemory 内存分析工具的操作手册
教程一.开始学习dotmemory 在本教程中,我们将学习如何运行dotMemory内存快照.此外,我们将简要地看看dotMemory的用户界面和基本分析的概念.考虑dotMemory本教程作为起点 ...
- ANDROID内存优化——大汇总(转)
原文作者博客:转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! ANDROID内存优化(大汇总——上) 写在最前: 本文的思路主要借鉴了20 ...
- 【MDCC技术大咖秀】Android内存优化之OOM
大神分析的很全面,所以就转过来保存一份,转自:http://www.csdn.net/article/2015-09-18/2825737/1 以下为正文: Android的内存优化是性能优化中很重要 ...
- ANDROID内存优化(大汇总——中)
转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 写在最前: 本文的思路主要借鉴了2014年AnDevCon开发者大会的一个演讲PPT,加上 ...
- Android内存优化之OOM
内容大多都是和OOM有关的实践总结概要.理解错误或是偏差的地方,还请多包涵指正,谢谢!本人Q:1524447071 (一)Android的内存管理机制 Google在Android的官网上有这样一篇文 ...
- 【腾讯Bugly干货分享】Android内存优化总结&实践
本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/2MsEAR9pQfMr1Sfs7cPdWQ 导语 智 ...
- 微擎开启性能优化里面的性能优化memcache内存优化及数据库读写分离
http://www.mitusky.com/forum.php?mod=viewthread&tid=3135 [微擎 安装使用] 微擎开启性能优化里面的性能优化memcache内存优化及数 ...
随机推荐
- Java8-Lock-No.02
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util ...
- C# LINQ标准查询操作符
首先添加数据集合 [Serializable] public class Racer : IComparable<Racer>, IFormattable { public Racer() ...
- jQuery.proxy(function,context)
jQuery.proxy(function,context) 概述 jQuery 1.4 新增.返回一个新函数,并且这个函数始终保持了特定的作用域.大理石平台检定规程 当有事件处理函数要附加到元素上, ...
- springmvc集成webService需要的jar包
- 使用scikit-learn决策树实现简单预测
1.scikit-learn决策树算法库介绍 scikit-learn决策树算法类库内部实现是使用了调优过的CART树算法,既可以做分类,又可以做回归.分类决策树的类对应的是DecisionTreeC ...
- 【概率论】3-3:累积分布函数(Cumulative Distribution Function)
title: [概率论]3-3:累积分布函数(Cumulative Distribution Function) categories: Mathematic Probability keywords ...
- AcWing:242. 一个简单的整数问题(树状数组)
给定长度为N的数列A,然后输入M行操作指令. 第一类指令形如“C l r d”,表示把数列中第l~r个数都加d. 第二类指令形如“Q X”,表示询问数列中第x个数的值. 对于每个询问,输出一个整数表示 ...
- AcWing:241. 楼兰图腾(树状数组逆序对)
在完成了分配任务之后,西部314来到了楼兰古城的西部. 相传很久以前这片土地上(比楼兰古城还早)生活着两个部落,一个部落崇拜尖刀(‘V’),一个部落崇拜铁锹(‘∧’),他们分别用V和∧的形状来代表各自 ...
- Pstools使用
pstool的介绍 PsTools是Sysinternals Suite中一款排名靠前的一个安全管理工具套件.现在被微软收购.目前pstools中含有12款各式各样的小工具.如果将它们灵活的运用,将会 ...
- adb的一些命令
adb pull <手机路径> <本机路径> 从手机中拉取信息到本地电脑上 adb push <本机路径> <手机路径> 从本地电脑推送信息到手机上