dotMemory Unit 3.2 Help

处理内存

要分析内存,首先需要获取内存转储(在 dotMemory Unit 中称为 内存检查点快照)。 要创建内存检查点,您应使用静态 dotMemory 类型的 Check 方法。 因此, dotMemory.Check 是几乎所有内存测试的基本起点。

dotMemory.Check 返回的 MemoryCheckPoint 实例可用作与其他检查点进行比较的基线,或用于检查检查点之间的内存流量。 分别参见 比较快照处理流量

传递给 dotMemory.Check 方法的 lambda 表达式允许根据特定条件对内存进行切片和分解。 传递给该 lambda 的 Memory 类型实例包含当前执行点的所有内存数据。 使用它获取特定对象的数据并过滤流量数据。 分别参见 处理对象集处理流量

示例

例如,在下面的示例中,传递给 dotMemory.Check 方法的 memory 对象和 Memory 类型包含当前执行点的所有内存数据。 传递给 memory.GetObjects 方法的 lambda 表达式根据某个条件返回一组对象(所有 Foo 类型的对象)。

dotMemory.Check(memory => { Assert.That(memory.GetObjects(where => where.Type.Is<Foo>()).ObjectsCount, Is.EqualTo(0)); });

在下一个示例中,我们在运行用户方法 Foo.Bar() 之前创建了一个内存检查点,然后(在用户方法完成工作后)创建了下一个检查点,并断言检查点之间的流量未超过 1000 字节。

var checkPoint1 = dotMemory.Check(); // create memory checkpoint #1 foo.Bar(); // run user method // Assert that foo.Bar() allocates no more than 1000 bytes dotMemory.Check(memory => { Assert.That(memory.GetTrafficFrom(memoryCheckPoint1).AllocatedMemory.SizeInBytes, Is.LessThanOrEqualTo(1000)); });

MemoryCheckPoint 结构体

表示某个执行点的内存数据引用。 使用此引用比较在不同执行点获取的数据,或获取两个点之间的内存流量数据。 由 dotMemory.Check 方法返回一个 MemoryCheckPoint 类型的实例。

dotMemory 静态类

dotMemory 方法

名称

描述

Check(): MemoryCheckPoint

返回一个 MemoryCheckPoint 类型的实例,该实例是当前执行点内存数据的引用。 使用此引用作为与其他点获取的内存数据进行比较的基准。

Check(Action<Memory> check): MemoryCheckPoint

返回当前执行点的内存数据引用,并允许使用 Assert 语句检查这些数据。 check 操作是一个应包含断言的 lambda 表达式。 传递给 lambda 的 Memory 实例提供了访问内存数据的接口。 默认情况下,如果断言失败,dotMemory Unit 将自动保存包含所有已收集快照的工作区。 使用此工作区分析测试失败的原因。 了解如何更改默认的自动保存行为。

Memory 类

表示某个执行点的内存数据。 Memory 类的对象用于借助 Assert 语句访问内存数据。 这些语句通过 lambda 表达式传递给 dotMemory.Check 方法。

Memory 方法

名称

描述

GetObjects(Func<ObjectProperty, Query> query): ObjectSet

(继承自 ObjectSet

通过特定条件获取对象的子集。 条件由 query 以 lambda 表达式的形式定义。 传递给 lambda 的 ObjectProperty 对象允许按类型、接口和其他参数选择对象。

返回一个 ObjectSet 类型的实例。

GroupByType: IReadOnlyCollection<TypeMemoryInfo>

(继承自 ObjectSet

返回一个 TypeMemoryInfo 类型的对象集合。 每个对象表示源对象集中某一特定类型,并携带该类型对象的数量及其总大小的信息。

GetDifference(MemoryCheckPoint memoryCheckPoint): SnapshotDifference

获取当前内存检查点与通过 memoryCheckPoint 参数传递的检查点之间的差异。

返回一个 SnapshotDifference 类型的实例,允许您获取有关新对象、死亡对象和存活对象的数据。

GetTrafficFrom(MemoryCheckPoint memoryCheckPoint): Traffic

获取当前内存快照与通过 memoryCheckPoint 参数传递的快照之间时间间隔内的内存流量数据。

返回一个 Traffic 类型的实例,允许您获取在指定时间间隔内分配和回收的对象数据。

Memory 属性

名称

类型

描述

ObjectsCount

int

(继承自 ObjectSet

内存中对象的总数。

SizeInBytes

long

(继承自 ObjectSet

内存中对象的总大小。

最后修改日期: 2025年 9月 28日