dotMemory Unit 3.2 Help

复杂案例。 流量类

在 dotMemory Unit 中,内存流量由 Traffic 类型表示。 Traffic 类型的对象是 Memory.GetTrafficFrom* 方法的返回结果。

要分析和处理流量数据,您应该使用传递给 Where 方法的 lambda 表达式,该方法属于 Traffic 类型。 Where 方法还会返回 Traffic 类型的实例,允许您构建 Where 方法的链。

Traffic 类型允许您通过两个属性: AllocatedMemoryCollectedMemory ,获取有关已分配和已回收内存的数据。 这些属性又具有 ObjectsCountSizeInBytes 属性,您可以在测试断言中使用它们。

示例

例如,要断言 bar.Foo() 方法分配的 string 类型对象不超过 1000 个,请编写以下内容:

[DotMemoryUnit(CollectAllocations=true)] // collect traffic data [Test] public void TestMethod1() { var checkPoint1 = dotMemory.Check(); bar.Foo(); dotMemory.Check(memory => { Assert.That(memory.GetTrafficFrom(checkPoint1).Where(traffic => traffic.Type.Is<string>()) .AllocatedMemory.ObjectsCount, Is.LessThan(1000)); }); }

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

Assert.That(memory.GetTrafficFrom(memoryCheckPoint2).Where(obj => obj.Type == typeof(Foo) | obj.Interface == typeof(IEnumerable)) .AllocatedMemory.ObjectsCount, Is.LessThan(10));

使用 Traffic 类的另一个好处是能够按对象类型对流量进行分组:

dotMemory.Check(memory => { var traffic = memory.GetTrafficFrom(checkPoint1); var group = traffic.GroupByType(); var heavyTrafficTypes = group.Where(typeMemoryInfo => typeMemoryInfo.AllocatedMemoryInfo.SizeInBytes > 1000000).ToList(); // do sth. with heavyTrafficTypes });

流量类

流量方法

名称

描述

Where(Func<TrafficProperty, Query> query): Traffic

根据特定条件获取内存流量数据。 条件由应通过 lambda 表达式返回的 Query 定义。 传递给 lambda 的 TrafficProperty 实例允许创建按对象类型、接口和其他参数过滤流量数据的查询。

返回一个 Traffic 类型的实例。

Where(TrafficQuery predicate): Traffic

根据特定条件获取内存流量数据。 条件由一个可重用查询定义——一个 TrafficPredicateQuery 类型的实例。 有关更多信息,请参阅 QueryBuilder

返回一个 Traffic 类型的实例。

GroupByType: IReadOnlyCollection<TypeTrafficInfo>

返回一个 TypeTrafficInfo 类型的对象集合。 每个对象表示特定类型对象的流量,并携带有关该类型已分配和已回收对象的信息。

流量属性

名称

类型

描述

AllocatedMemory

MemoryInfo

有关已分配对象的数据:对象数量和总大小。

CollectedMemory

MemoryInfo

有关已回收对象的数据:对象数量和总大小。

MemoryInfo 结构体

MemoryInfo 结构体用于获取对象数量及其大小的数据。

MemoryInfo 属性

名称

类型

描述

ObjectsCount

int

集合中对象的总数。

SizeInBytes

long

集合中对象的总大小。

TrafficProperty 类

根据特定条件(类型、接口等)过滤流量。

TrafficProperty 属性

名称

类型

描述

类型

TypeProperty

允许按对象类型过滤流量。

Interface

InterfaceProperty

允许按接口过滤流量。

Namespace

NamespaceProperty

允许按命名空间过滤流量。

Assembly

AssemblyProperty

允许按程序集过滤流量。

TypeTrafficInfo 类

TypeTrafficInfo 携带有关同一类型对象流量的信息:已分配和已回收的对象。 TypeTrafficInfo 类的实例是通过 GroupByType() 方法对流量进行分组的结果。

TypeTrafficInfo 属性

名称

类型

描述

AllocatedMemoryInfo

MemoryInfo

类型 的已分配对象数据。

CollectedMemoryInfo

MemoryInfo

类型 的已回收对象数据。

TypeFullyQualifiedName

string

类型 的完全限定名称。

类型

类型

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

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

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