[此文档是初定版,随时可能进行更改。]
JavaScript 内存分析器在 Visual Studio 2012 更新 1 和 Visual Studio 2013 中提供,旨在帮助你了解内存使用量和查找使用 JavaScript 为 Windows 生成的 Windows 应用商店应用程序中的内存泄漏。
JavaScript 内存分析器可以为你执行以下操作:
-
通过强调最相关的数据帮助你在应用程序中快速查找内存使用情况问题。
你将以快照摘要形式收到此数据,其显示两个快照之间的差异,并提供指向更详细视图的链接。
-
提供控制器、类型和根的视图来帮助隔离问题。
-
减少 JavaScript 堆数据中的不可操作的信息。
还可按对象名称筛选数据。
在本主题中:
运行 JavaScript 内存分析器
检查内存使用量
隔离内存泄漏
查看实时内存使用量摘要
查看快照摘要
查看快照详细信息
查看快照差异
在对象树中查找对象
筛选数据
查看共享对象引用
显示内置对象
保存诊断会话文件
将源代码与内存使用量数据关联
确定内存问题的提示
如果工作的 Windows 应用商店应用程序在 Visual Studio 中打开或安装在运行 Windows 8 或 Windows 8.1 预览版 的计算机上,则可使用内存分析器。
运行内存分析器
-
打开 Visual Studio。
-
“远程计算机”。
从 Visual Studio 运行 Windows 应用商店应用程序。
-
“性能和诊断”。
“更改目标”。
以下选项可用于分析目标:
-
如果你要在远程计算机上运行应用程序,则必须选择此选项,这是默认值。
-
在远程计算机上运行应用程序时,不能使用此选项。
当你无权访问源代码时,请使用此选项分析计算机上运行的应用程序的内存使用量。
-
在远程计算机上运行应用程序时,不能使用此选项。
如果要分析你自己的应用程序开发之外的任何应用程序的内存使用量,此选项也很有用。
-
-
“启动”。
-
“是”。
与应用程序交互以测试相关的内存使用量方案并查看内存关系图,如以下各节所述。
-
按 Alt+Tab 切换到 Visual Studio。
查看快照摘要。
如果你怀疑你的应用程序有内存泄漏,这些步骤将非常有用。
-
在 Visual Studio 中打开应用程序。
-
运行 JavaScript 内存分析器。
-
例如,这可能是在大型 DOM 刚要转变之前、加载特定页时或启动应用程序时。
-
切换到 Visual Studio(按 Alt+Tab)。
-
“拍摄堆快照”拍摄基线堆快照。
下图演示了一个基线堆快照示例:
命令。
-
切换到你的应用程序并进行一些你怀疑可能导致内存泄漏的操作。
检查内存使用量。
-
切换到 Visual Studio 并拍摄第二个快照。
-
切换到你的应用程序并重复你怀疑的导致内存泄漏的操作。
-
切换到 Visual Studio 并拍摄第三个快照。
下图演示了第二个和第三个快照的示例:
例如,预计可能有一些更改(如在页面上更新页眉和页脚)会造成内存使用量的更改,但可能与内存泄漏不相关。
-
下面是一些提示:
-
潜在问题(快照摘要中用蓝色信息图标标记)。
-
绿色表示已添加的元素或对象。
只有已添加或已修改的项表示潜在的内存泄漏。
-
检查控制器的差异视图来快速确定使用最多内存的对象。
-
使用这些视图可根据应用程序的已知行为来查找意外的对象大小或对象计数方面的较大变化。
-
-
用户标记以及分析器中提供的其他内存使用量数据。
-
“在根视图中显示”。
可以在快照详细信息视图中查看有关每个快照的内存使用量的详细信息。
例如,默认情况下,堆大小链接将在控制器视图打开的情况下打开快照详细信息。
此图显示了快照详细信息的控制器视图,以及按问题类型排序的内存使用量数据,并突出显示了潜在问题。
-
工具提示提供每个问题的说明。
控制器的差异视图可以帮助快速确定使用最多内存的对象。
-
默认情况下,它们按实例计数排序。
-
默认情况下,子节点按保留的大小列排序,最大的排在顶部。
所有三个视图都显示了类似的值类型,包括:
-
例如,对于 HTML 元素,快照详细信息显示 ID 特性值(如果使用)。
-
对象类型(例如,HTML 链接元素或 div 元素)。
-
对象大小,不包括任何引用对象的大小。
-
从实用的角度而言,这是对象保留的内存量,因此,如果你删除对象,则将回收指定的内存量。
-
此值仅显示在类型视图中。
在 JavaScript 内存分析器中,可以在快照差异视图中将一个快照与前一个快照进行比较。
在快照摘要视图中,如果拍摄了两个或更多快照,则可以通过选择差异堆大小或差异对象计数链接来查看差异快照的详细信息。
快照差异显示添加到两个快照之间的堆中的任何对象。
此图显示快照差异中的类型视图。
-
可能的值包括:
-
自前一个快照以来添加的对象使用绿色进行彩色编码。
-
自前一个快照以来修改的对象使用蓝色进行彩色编码。
-
未更改的对象不会泄漏内存。
-
这些对象不会泄漏内存。
-
-
当前快照中对象的大小及其在之前的快照中的大小之间的差异,不包括任何引用对象的大小。
-
从实用的角度而言,保留大小是对象保留的内存量,因此,如果你删除对象,则你回收指定的内存量。
-
此值仅显示在类型视图中。
若要帮助隔离具有内存问题的代码部分,可在 JavaScript 内存分析器中使用以下两条命令:
-
JavaScript 控制台命令之一。
-
此说明不能超过 100 个字符。
|
来加速分析。 |
takeHeapSnapshot,请使用此代码:
if (console && console.takeHeapSnapshot) {
console.takeHeapSnapshot();
}
performance.mark,请使用此代码:
if (performance && performance.mark) { performance.mark("message_string"); }
字符串参数设置为“data generated”:
from:http://msdn.microsoft.com/zh-cn/library/windows/apps/jj819176.aspx