复杂案例。 流量类
在 dotMemory Unit 中,内存流量由 Traffic 类型表示。 Traffic 类型的对象是 Memory.GetTrafficFrom* 方法的返回结果。
要分析和处理流量数据,您应该使用传递给 Where 方法的 lambda 表达式,该方法属于 Traffic 类型。 Where 方法还会返回 Traffic 类型的实例,允许您构建 Where 方法的链。
Traffic 类型允许您通过两个属性: AllocatedMemory 和 CollectedMemory ,获取有关已分配和已回收内存的数据。 这些属性又具有 ObjectsCount 和 SizeInBytes 属性,您可以在测试断言中使用它们。
示例
例如,要断言 bar.Foo() 方法分配的 string 类型对象不超过 1000 个,请编写以下内容:
dotMemory Unit 还为流量查询提供了替代语法。 您可以使用 ==、 & 和 | 逻辑运算符来组合多个查询。 例如:
使用 Traffic 类的另一个好处是能够按对象类型对流量进行分组:
流量类
流量方法
名称 | 描述 |
|---|---|
| 根据特定条件获取内存流量数据。 条件由应通过 lambda 表达式返回的 返回一个 |
| 根据特定条件获取内存流量数据。 条件由一个可重用查询定义——一个 TrafficPredicateQuery 类型的实例。 有关更多信息,请参阅 QueryBuilder。 返回一个 |
| 返回一个 TypeTrafficInfo 类型的对象集合。 每个对象表示特定类型对象的流量,并携带有关该类型已分配和已回收对象的信息。 |
流量属性
名称 | 类型 | 描述 |
|---|---|---|
|
| 有关已分配对象的数据:对象数量和总大小。 |
|
| 有关已回收对象的数据:对象数量和总大小。 |
MemoryInfo 结构体
MemoryInfo 结构体用于获取对象数量及其大小的数据。
MemoryInfo 属性
名称 | 类型 | 描述 |
|---|---|---|
|
| 集合中对象的总数。 |
|
| 集合中对象的总大小。 |
TrafficProperty 类
根据特定条件(类型、接口等)过滤流量。
TrafficProperty 属性
名称 | 类型 | 描述 |
|---|---|---|
| 允许按对象类型过滤流量。 | |
| 允许按接口过滤流量。 | |
| 允许按命名空间过滤流量。 | |
| 允许按程序集过滤流量。 |
TypeTrafficInfo 类
TypeTrafficInfo 携带有关同一类型对象流量的信息:已分配和已回收的对象。 TypeTrafficInfo 类的实例是通过 GroupByType() 方法对流量进行分组的结果。
TypeTrafficInfo 属性
名称 | 类型 | 描述 |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
| 由此 如果类型已被 CLR 卸载或类型位于另一个 AppDomain 中,则可能为 |