dotMemory Unit 3.2 Help

处理对象集

对象集是通过特定条件选择的一组对象。 为了便于理解,可以将对象集视为某些查询的结果,例如“选择所有提升到 Gen 2 的字符串类型对象”或“选择由实例 A 保留在内存中的所有对象”等。 作为 ObjectSet.GetObjectsObjectSet.GetExclusivelyRetainedObjects 方法的结果,返回一个 ObjectSet 实例。

要通过多个条件切片数据,您可以构建 GetObjects 调用的链。 ObjectSet 类型有两个属性,您可以在测试断言中使用: ObjectsCountSizeInBytes

示例

例如,以下代码断言 Large Object Heap 中没有 stringFoo 对象:

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

dotMemory Unit 还提供了对象集查询的替代语法。 您可以使用 ==&| 逻辑运算符来组合多个查询。 例如:

Assert.That(memory.GetObjects(where => where.Type == (typeof(string)) & where.Generation == Generation.LOH).ObjectsCount, Is.EqualTo(0));

ObjectSet 类

表示内存中的一组对象。

ObjectSet 方法

名称

描述

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

通过特定条件获取对象的子集。 条件由应通过 lambda 表达式返回的 Query 定义。 传递给 lambda 的 ObjectProperty 对象允许创建按类型、接口和其他参数选择对象的查询。

返回一个 ObjectSet 类型的实例。

GetObjects(ObjectSetQuery objectSetQuery): ObjectSet

通过特定条件获取对象的子集。 条件由可重用查询定义——一个 ObjectSetQuery 类型的实例。 有关更多信息,请参阅 QueryBuilder

返回一个 ObjectSet 类型的实例。

GetExclusivelyRetainedObjects(): ObjectSet

获取当前对象集 独占保留(支配) 的对象集。

返回一个 ObjectSet 类型的实例。

GroupByType: IReadOnlyCollection<TypeMemoryInfo>

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

ObjectSet 属性

名称

类型

描述

ObjectsCount

int

集合中对象的总数。

SizeInBytes

long

集合中对象的总大小(以字节为单位)。

ObjectProperty 类

通过特定条件选择集合中的对象:类型、接口等。

ObjectProperty 方法

名称

描述

LeakedOnEventHandler(): Query

创建“选择所有导致事件处理程序泄漏的对象”查询。 了解更多

返回可由 GetObjects 方法使用的 Query

IsNotDominated(): Query

创建查询“选择所有在内存中未被 独占保留 的对象(换句话说,被多个对象保留的对象)”。

返回可由 GetObjects 方法使用的 Query

ObjectProperty 属性

名称

类型

描述

类型

TypeProperty

允许按类型选择对象。

Interface

InterfaceProperty

允许按接口选择对象。

Namespace

NamespaceProperty

允许按命名空间选择对象。

Assembly

AssemblyProperty

允许按程序集选择对象。

Generation

GenerationProperty

允许按代选择对象。

TypeProperty 类

TypeProperty 用于创建“按类型选择对象”查询。

名称

描述

Is(params Type[] typeList): Query

创建“选择所有特定类型的对象”查询。 类型列表通过 类型 数组传递。 也支持开放泛型类型。

返回可由 GetObjects 方法使用的 Query

Is<T>: Query

创建“选择特定类型的所有对象”查询。 也支持开放泛型类型。

返回可由 GetObjects 方法使用的 Query

IsNot(params Type[] typeList): Query

创建“选择所有不属于特定类型的对象”查询。 类型列表通过 类型 数组传递。 也支持开放泛型类型。

返回可由 GetObjects 方法使用的 Query

IsNot<T>: Query

创建“选择所有不属于特定类型的对象”查询。 也支持开放泛型类型。

返回可由 GetObjects 方法使用的 Query

Like(params string[] typeWildcard): Query

创建“选择所有特定类型的对象”查询。 类型列表通过 string 数组传递。 允许使用星号(*)通配符。

返回可由 GetObjects 方法使用的 Query

NotLike(params string[] typeWildcard): Query

创建“选择所有不属于特定类型的对象”查询。 类型列表通过 string 数组传递。 允许使用星号(*)通配符。

返回可由 GetObjects 方法使用的 Query

InterfaceProperty 类

InterfaceProperty 用于创建“按接口选择对象”查询。

名称

描述

Is(params Type[] typeList): Query

创建“选择所有实现特定接口的对象”查询。 接口列表通过 类型 数组传递。 也支持开放泛型接口。

返回可由 GetObjects 方法使用的 Query

Is<T>: Query

创建“选择实现特定接口的所有对象”查询。 也支持开放泛型接口。

返回可由 GetObjects 方法使用的 Query

IsNot(params Type[] typeList): Query

创建“选择所有未实现特定接口的对象”查询。 接口列表通过 类型 数组传递。 也支持开放泛型接口。

返回可由 GetObjects 方法使用的 Query

IsNot<T>: Query

创建“选择所有未实现特定接口的对象”查询。 也支持开放泛型接口。

返回可由 GetObjects 方法使用的 Query

Like(params string[] typeWildcard): Query

创建“选择所有实现特定接口的对象”查询。 接口列表通过 string 数组传递。 允许使用星号(*)通配符。

返回可由 GetObjects 方法使用的 Query

NotLike(params string[] typeWildcard): Query

创建“选择所有实现特定接口的对象”查询。 接口列表通过 string 数组传递。 允许使用星号(*)通配符。

返回可由 GetObjects 方法使用的 Query

NamespaceProperty 类

NamespaceProperty 用于创建“按命名空间选择对象”查询。

NamespaceProperty 方法

名称

描述

Like(params string[] namespaceWildcard): Query

创建“选择所有属于特定命名空间的对象”查询。 命名空间列表通过 string 数组传递。 允许使用星号(*)通配符。

返回可由 GetObjects 方法使用的 Query

NotLike(params string[] namespaceWildcard): Query

创建“选择所有不属于特定命名空间的对象”查询。 命名空间列表通过 string 数组传递。 允许使用星号(*)通配符。

返回可由 GetObjects 方法使用的 Query

AssemblyProperty 类

AssemblyProperty 用于创建“按程序集选择对象”查询。

AssemblyProperty 方法

名称

描述

Is(params Assembly[] assemblies): Query

创建“选择所有属于特定程序集的对象”查询。 程序集列表通过 Assembly 数组传递。

返回可由 GetObjects 方法使用的 Query

IsNot(params Assembly[] assemblies): Query

创建“选择所有不属于特定程序集的对象”查询。 程序集列表通过 Assembly 数组传递。

返回可由 GetObjects 方法使用的 Query

Like(params string[] assemblyPattern): Query

创建“选择所有属于特定程序集的对象”查询。 程序集列表通过 string 数组传递。

返回可由 GetObjects 方法使用的 Query

NotLike(params string[] assemblyPattern): Query

创建“选择所有不属于特定程序集的对象”查询。 程序集列表通过 string 数组传递。

返回可由 GetObjects 方法使用的 Query

GenerationProperty 类

GenerationProperty 用于创建“按代选择对象”查询。

GenerationProperty 方法

名称

描述

Is(params Generation[] generations): Query

创建“选择所有来自特定托管堆段的对象”查询。 堆段列表通过 Generation 数组传递。

返回可由 GetObjects 方法使用的 Query

IsNot(params Generation[] generations): Query

创建“选择所有不属于特定托管堆段的对象”查询。 堆段列表通过 Generation 数组传递。

返回可由 GetObjects 方法使用的 Query

Generation 枚举

表示某些托管堆段:

描述

Gen1

第 1 代堆段。

Gen2

第 2 代堆段。

LOH

大对象堆.

TypeMemoryInfo 类

TypeMemoryInfo 携带关于同一类型对象组的信息:对象数量及其大小。 TypeMemoryInfo 类的实例是通过 GroupByType() 方法对对象进行分组的结果。

TypeMemoryInfo 属性

名称

类型

描述

ObjectsCount

int

类型 的对象总数。

SizeInBytes

long

类型 的对象总大小。

TypeFullyQualifiedName

string

类型 的完全限定名称。

类型

类型

由此 TypeMemoryInfo 类实例表示的对象类型。

如果类型已卸载或类型位于另一个 AppDomain 中,则可能为 null

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