与内存交互的替代方式
如果您不想以 处理内存 中描述的方式与内存交互,您可以选择另一种方式。 我们并未隐藏基于 dotMemoryApi 静态类的框架“内核”级别。 此类允许您直接操作内存快照,而无需使用 lambda 表达式。 实际上, dotMemory.Check 方法是对 dotMemoryApi 调用的封装。
您可以使用 dotMemoryApi 类编写自己的封装器,或者直接操作内存快照。
在后一种情况下,您需要注意以下特点:
获取快照可能是一个耗时的操作。
快照包含的是您获取它们时的内存数据,而不是您访问它们时的数据。
如果测试代码中出现错误,测试运行器将无法区分测试失败是由于 dotMemory Unit 调用还是其他测试代码导致的。
所有 dotMemory Unit 调用都应在检查是否启用了对 dotMemory Unit 的支持后进行。
例如,以下断言
可以重写为
dotMemoryApi 静态类
dotMemoryApi 方法
名称 | 描述 |
|---|---|
| 返回一个 Snapshot实例,该实例是当前执行点内存数据的引用。 使用此引用获取内存中对象的数据,将其与另一个快照的数据进行比较,或获取两个快照之间的内存流量数据。 |
| 获取 返回一个 SnapshotDifference类型的实例,其中包含在获取快照的时间间隔内分配和收集的对象数据。 |
| 获取在 返回一个 Traffic 类型的实例,允许您获取在指定时间间隔内分配和回收的对象数据。 |
| 保存包含单元测试运行期间收集的所有内存快照的工作区,使用 |
dotMemoryApi 属性
名称 | 类型 | 描述 |
|---|---|---|
|
| 如果测试在 dotMemory Unit 下运行,则返回 |
|
| 定义是否必须收集内存分配数据(内存流量和创建堆栈跟踪数据)。 如果您需要断言的分配数据,请设置为 |
Snapshot 类
表示某个执行点的内存数据。
Snapshot 方法
名称 | 描述 |
|---|---|
| (继承自 ObjectSet) 通过特定条件获取对象的子集。 条件由 返回一个 ObjectSet 类型的实例。 |
| (继承自 ObjectSet) 返回一个 TypeMemoryInfo 类型的对象集合。 每个对象表示源对象集中某一特定类型,并携带该类型对象的数量及其总大小的信息。 |