问题标签 [dotmemory]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
106 浏览

nunit - DotMemory 错误(将快照与自身进行比较)

尝试使用以下方法在我的自动化测试中进行一些内存泄漏检查

  • nUnit 3.8.1
  • TestStack.White 0.13.3
  • dotMemory 3.0.20171219.105559

使用以下控制台命令启动我的测试,如此处所述

dotMemoryUnit.exe "E:\nunit3-console.exe" -- "C:\Dev\White\bin\Debug\Automation.dll"

测试(下面主要以伪代码概述)启动应用程序,抓取快照,导航到各个子页面,返回基本页面,然后获取另一个快照,以便我可以对幸存的对象进行比较。快照比较是使用此处概述的方法完成的

这个想法是,如果有任何 UI 元素由于事件等原因没有被丢弃,这应该将它们作为幸存的对象拾取,然后我可以稍后手动重复测试以追踪问题的根源。

但是,当我使用 dotmemoryunit.exe 控制台运行测试时,出现以下错误。

1) 错误:White.Tests.MemoryCheck.System.ArguementException:您正在尝试在 JetBrains.dotMemoryUnit.Kernel.dotMemory.Api.GetDifference< Snapshot snapshot1, Snapshot snapshot2> 处将快照与其自身进行比较

考虑到它们绝对是不同的快照,我无法弄清楚为什么会失败。

我使用控制台运行器的原因是,由于某种原因,当我尝试使用 resharper 测试运行器运行自动化测试时,它们没有运行,它只是返回 Inconclusive : test not run

0 投票
3 回答
2274 浏览

c# - 如何解释 BenchmarkDotNet 和 dotMemory 的结果?

所以,我的Main()方法中有以下一段代码

接下来,我有下面的类在测试下

运行大约 6 分钟后,我收到以下Main()结果dotMemory

在此处输入图像描述

该应用程序从 开始10Mb并上升到14Mb

但是当我运行BenchmarkDotnet测试时,我得到了这个 在此处输入图像描述

我看到我已经被2.6GB分配了。什么?似乎一点都不好。另外,我看不到Gen1Gen2列。这是否意味着代码没有在其中分配任何东西,所以没有什么可显示的?

我如何解释结果?在 .中似乎完全可以DotMemory,但在BenchmarkDotNet. 我很新,BenchmarkDotnet对有关结果的任何信息都有帮助。

PS。LogicUnderTest()广泛适用于字符串。

PSS。大致LogicUnderTest是这样实现的

0 投票
1 回答
100 浏览

windbg - 对象计数减少了 2 倍

我有一个 dotMemory 分析会话,但我无法找到内存泄漏,所以我做了以下操作:

  1. 启动 dotMemory 会话
  2. 附加WinDbg并闯入进程
  3. 在 dotMemory 中拍摄快照
  4. 让进程继续 ( g) 以便 dotMemory 可以获取 snapshop
  5. 拍摄快照后,再次进入进程

像这样我应该得到相同的结果,如果应用程序处于空闲状态,即什么都不做(嗯,它运行消息泵)。

查看 dotMemory 快照中的对象,我可以看到 88000 个 JProperty 类型的对象:

dotMemory 截图

然而,在 WinDbg 中,我看到了双倍数量的对象:

谁错了 - 或者将调试器与 dotMemory 一起使用是一个已知问题?

我在 Windows 7 上使用 dotMemory 2018.1.4 和 WinDbg 10.0.15063,调试 x64 程序(如果有的话)。

0 投票
2 回答
1639 浏览

c# - JetBrains dotMemory:无法导入转储:目前不支持 32 位进程的 64 位转储

我已经ProcDump从 Windows Sysinternals 网站下载。https://docs.microsoft.com/en-us/sysinternals/downloads/procdump

我使用下面的命令来启动转储收集。

这是命令行输出

现在,我正在尝试将其导入,JetBrains dotMemory但不幸的是我收到了错误提示。


点内存

无法导入转储:目前不支持 32 位进程的 64 位转储。请使用 32 位工具进行转储。例如,>%WinDir%\SysWOW64\taskmgr.exe 是 32 位版本的任务管理器。

是什么意思64-bit dumps of 32-bit processes?我试图从两个 EXE 中创建转储ProcDump,但我得到了相同的消息提示。

在此处输入图像描述

0 投票
1 回答
456 浏览

iis - dotMemory 资源加载器找不到 MUI 文件。尝试分析本地 IIS 时

当我尝试使用 dotMemory 连接到本地 IIS 时出现错误


点内存

无法开始分析。

资源加载器找不到 MUI 文件。

好的

我正在使用 v.2018.2.3

0 投票
0 回答
200 浏览

continuous-integration - 带有 XUnit 的 dotMemory Unit Standalone 启动器在测试结束时挂起

我在 gitlab CI 服务器上使用 dotMemory Unit Standalone 启动器来启动 XUnit 单元测试。

测试成功但进程在最后挂起然后测试被认为失败,因为它达到了超时。测试输出卡住前的结果

我使用下面的命令gitlab-ci.yml来启动测试

输出文件夹包含 xunit.console 可执行文件和测试 dll 及其依赖项。memorytools 文件夹包含 JetBrains.dotMemoryUnit nuget 包的工具文件夹中的所有内容

测试只是:

在没有dotMemory 的情况下使用Xunit 启动测试没有问题。当我在我的计算机上使用 dotmemory localy 启动它时,测试也不会挂起。

使用的版本:

  • JetBrains.dotMemoryUnit 3.0.20171
  • xunit.runner.console 2.4.1
  • GitLab 社区版 11.4.5
0 投票
0 回答
46 浏览

c# - 用数组解释 JetBrains dotMemory 配置文件

我有一个算法,它基于一个网格,它有一个二维网格正方形数组,每个网格正方形都有一个三角形数组。

我已经运行 dotMemory 来分析内存使用情况,并注意到一些我无法解释的东西。

在 Dominators 视图下,我可以看到 Grid 类,它是 2D GridSquare 数组的支配者,然后 GridSquare 数组是 GridSquare 和 Triangle 的支配者。这里说有几千个三角形。但是,如果我在 GridSquare 中进一步深入,我会看到它的三角形数组,然后我可以展开它并看到这里还有另一个三角形节点,它有大约 100 个三角形。

所以我的问题是:为什么有两个数量不同的三角形节点,这是否表明内存使用效率低下?

0 投票
0 回答
62 浏览

c# - 使用 JToken 时保留的内存

我正在做一个 ASP.net 核心 MVC 调用,它有一个可以包含 2 MB 数据的 JSON 主体,应用程序的内存增加了 400 MB 并且不会下降。

网络通话具有以下签名:

如果我将上述切换为:

我没有看到内存增加。每次我使用 JToken 参数进行调用时,即使请求正文包含 2MB 的数据,内存也会不断增加几个 100MB。

在 DotMemory 中,我看到很多字符串被使用以及对 LogMessageEntry 的引用。

0 投票
1 回答
30 浏览

.net - 查找大数组的声明

dotMemory 表示我的一个用户的应用程序实例有一个长度为 20,971,520 的稀疏填充字节数组,它浪费了 160MB。这是来自进程转储分析。

有没有办法从进程转储中找到该数组的声明/使用位置?我也有解决方案代码。

0 投票
2 回答
845 浏览

c# - 如果 DotMemory Unit 不可用,我如何跳过 xunit 理论?

在 XUnit 测试项目中,当测试不在 DotMemory Unit 下运行时,我希望跳过必须使用 DotMemory Unit 运行的理论。

目前我正在使用 dotMemoryApi 强制理论失败,根据以下代码段:

这行得通,但我宁愿在不使用 DotMemory Unit 运行时跳过该理论,而不是失败。

我已经尝试过SkippableFact nuget package,但是在 DotMemory Unit 下运行时失败,但出现以下异常:

DotMemoryUnitException : dotMemory Unit 方法是从 >test 方法外部调用的: - 如果您使用的是不支持开箱即用的单元测试运行器,那么可能对 dotMemory Unit 的调用是从 >DotMemoryUnitController TestStart() 和TestEnd() 方法或这些方法 > 以错误的顺序调用。了解有关 DotMemoryUnitController >类的更多信息:https ://www.jetbrains.com/help/dotmemory-unit/3.0/Working_with_Unsupported_Unit_Testing_Frameworks.html

我也尝试过扩展 XUnit.TheoryAttribute 类,如下所示,这确实会导致理论被跳过,但不幸的是,即使使用 dotMemoryUnit 运行它也会跳过测试。

有什么想法吗?