处理对象集
对象集是通过特定条件选择的一组对象。 为了便于理解,可以将对象集视为某些查询的结果,例如“选择所有提升到 Gen 2 的字符串类型对象”或“选择由实例 A 保留在内存中的所有对象”等。 作为 ObjectSet.GetObjects 和 ObjectSet.GetExclusivelyRetainedObjects 方法的结果,返回一个 ObjectSet 实例。
要通过多个条件切片数据,您可以构建 GetObjects 调用的链。 ObjectSet 类型有两个属性,您可以在测试断言中使用: ObjectsCount 和 SizeInBytes。
示例
例如,以下代码断言 Large Object Heap 中没有 string 和 Foo 对象:
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日