教程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代图增长)。当垃圾收集发生,内存消耗降低。作为一个结果,时间如下一个锯状图案。

  1. 当代计数器达到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),这是一个很好的优化。

时间: 2024-10-18 20:22:03

教程3 -如何与dotmemory内存优化交通的相关文章

iOS高级教程:处理1000张图片的内存优化

一.项目需求 在实际项目中,用户在上传图片时,有时会一次性上传大量的图片.在上传图片前,我们要进行一系列操作,比如:旋转图片为正确方向,压缩图片等,这些操作需要将图片加载到内存中,下面对内存的使用做详细分析. 二.内存分析,非优化 我在测试项目中,重复加载了一张图片1000次,首先加载图片到内存,然后进行压缩操作,释放内存 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 for (int i = 0; i <= 1000; i ++) {     

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

教程一.开始学习dotmemory 在本教程中,我们将学习如何运行dotMemory内存快照.此外,我们将简要地看看dotMemory的用户界面和基本分析的概念.考虑dotMemory本教程作为起点 基本条款: 你可能会问:“什么是内存快照和为什么我要学他们?”这是一个很好的时间来达成一些内存分析 您将在本教程中遇到. 从内存的角度来看,应用程序由连续的工作为新对象分配内存和释放内存的对象不再使用的应用程序.对象分配一个接一个地在所谓的托管堆(关于内存管理.net,遵循这个链接).在此基础上,我

U3D内存优化

原创文章如需转载请注明:转载自风宇冲Unity3D教程学院  U3D内存优化 读了Hog关于内存管理文章, 自己测试了下. 有以下收获: (1)Unity的Profiler性能监测是非常准确. (2)测试复盘的 结果也完全与Hog的一致 (3)但是场景里已经放的物体,删除后,GameObject,Transform等复制出来的是被删掉了.但是引用的贴图却没有被删除.使用Resources.UnloadUnusedAssets并没有效果. 或者实时创建的,依然没有被释放. 最后用了Resource

ANDROID内存优化(大汇总——中)

本文的思路主要借鉴了2014年AnDevCon开发者大会的一个演讲PPT,加上把网上搜集的各种内存零散知识点进行汇总.挑选.简化后整理而成. 所以我将本文定义为一个工具类的文章,如果你在ANDROID开发中遇到关于内存问题,或者马上要参加面试,或者就是单纯的学习或复习一下内存相关知识,都欢迎阅读.(本文最后我会尽量列出所参考的文章). OOM: 内存泄露可以引发很多的问题: 1.程序卡顿,响应速度慢(内存占用高时JVM虚拟机会频繁触发GC) 2.莫名消失(当你的程序所占内存越大,它在后台的时候就

ANDROID内存优化——大汇总(转)

原文作者博客:转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! ANDROID内存优化(大汇总——上) 写在最前: 本文的思路主要借鉴了2014年AnDevCon开发者大会的一个演讲PPT,加上把网上搜集的各种内存零散知识点进行汇总.挑选.简化后整理而成. 所以我将本文定义为一个工具类的文章,如果你在ANDROID开发中遇到关于内存问题,或者马上要参加面试,或者就是单纯的学习或复习一下内存相关知识,都欢迎阅读.(本文最后我会尽量列出所参

Android内存优化大全(中)

转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 写在最前: 本文的思路主要借鉴了2014年AnDevCon开发者大会的一个演讲PPT,加上把网上搜集的各种内存零散知识点进行汇总.挑选.简化后整理而成. 所以我将本文定义为一个工具类的文章,如果你在ANDROID开发中遇到关于内存问题,或者马上要参加面试,或者就是单纯的学习或复习一下内存相关知识,都欢迎阅读.(本文最后我会尽量列出所参考的文章). OOM: 内存泄露可以引发很多的问题:

android中的内存优化

内存泄露可以引发很多的问题: 1.程序卡顿,响应速度慢(内存占用高时JVM虚拟机会频繁触发GC) 2.莫名消失(当你的程序所占内存越大,它在后台的时候就越可能被干掉.反之内存占用越小,在后台存在的时间就越长) 3.直接崩溃(OutOfMemoryError) ANDROID内存面临的问题: 1.有限的堆内存,原始只有16M 2.内存大小消耗等根据设备,操作系统等级,屏幕尺寸的不同而不同 3.程序不能直接控制 4.支持后台多任务处理(multitasking) 5.运行在虚拟机之上 我主要通过以下

Android内存优化之OOM

内容大多都是和OOM有关的实践总结概要.理解错误或是偏差的地方,还请多包涵指正,谢谢!本人Q:1524447071 (一)Android的内存管理机制 Google在Android的官网上有这样一篇文章,初步介绍了Android是如何管理应用的进程与内存分配:http://developer.android.com/training/articles/memory.html. Android系统的Dalvik虚拟机扮演了常规的内存垃圾自动回收的角色,Android系统没有为内存提供交换区,它使用

Android中内存优化

CSDN博客不写,排名会下降,我知道了...... Android内存优化,设计到很多方面,参考别大神的博客,自己也总结一下..... 下面将通过两篇博客,浅析Android 中的内存优化问题.来张图抖索一下精神.... 本片博客将一下内存优化,主要参考工作经验和借鉴大牛的一些博客...... 一.什么是内存? 简单理解,Android内存包括运行内存RAM.和磁盘缓存ROM. 而内存优化,主要值运行内存的优化. RAM(random access memory): 寄存器(Registers)