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 语句检查这些数据。 检查 操作是一个应包含断言的 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)

内存中对象的总大小。

2026年 3月 24日