用于分析进程中加载​​的本机 DLL 和程序集的内存占用的工具?

2024-01-06

根据任务管理器,我有一个进程持有 130MB 内存,根据任务管理器,只有 11MB 的活动 .NET 对象dotTrace http://www.jetbrains.com/profiler/所以我想知道另外 120MB 发生了什么?

我需要一个工具来列出进程中加载​​的程序集和本机 DLL,获取进程中图像的大小,并针对每个程序集测量 JITed 方法的内存占用量。

ListDlls http://technet.microsoft.com/en-us/sysinternals/bb896656来自 SysInternal 的部分完成了这项工作。但它不测量 JIT 代码大小,仅提供原始数据。理想情况下,我希望有一个用户界面来分析和总结这些数据。

最近,Visual Studio 团队报告称已使用该工具完成了此类分析PerfView http://blogs.msdn.com/b/vancem/archive/2011/12/28/publication-of-the-perfview-performance-analysis-tool.aspx。这在博客文章中有说明Visual Studio 11 Beta 性能第 1 部分 https://devblogs.microsoft.com/visualstudio/visual-studio-11-beta-performance-part-1/, 部分:最大的 VM 消费者 - DLL。有人有使用 PerfView 分析本机 Dll 和程序集占用空间的经验和反馈吗?

Except ListDlls and PerfView,您会推荐其他工具吗?


Ok, VMMAP http://technet.microsoft.com/en-us/sysinternals/dd535533 advised by Simon Mourier seems to be the more suited tool for this task. enter image description here VMMAP shows that the bulk of working set memory goes into the Managed Stack (113MB in green below), so the problem is more related to .NET objects than unmanaged memory. The green saw tooth curve, is just a timeline of loading/unloading sessions. For some reasons, my first measures were quite wrong:

  • dotTrace 告诉我分配了 41MB .NET 对象,
  • WMMAP 显示 180MB 的工作集(任务管理器显示类似的数字)
  • WMMAP 显示 GC 分配了 113MB 的托管堆。 90MB 的托管堆内存位于工作集中:

所以我的计划是:

  1. 确定为什么 GC 为 41MB 的 .NET 对象分配 113MB 的托管堆? (这样的数字正常吗?是因为碎片化太严重吗?)
  2. 努力缩小这组分配的 41MB .NET 对象!

既然你提到了 sysinternals 的 ListDlls,那么还有另一个工具叫做流程浏览器 http://technet.microsoft.com/en-us/sysinternals/bb896653它包含大量信息,并且比 ListDlls 好得多(您需要确保拥有最新版本,该版本还包含大量 .NET 信息,支持 64 位和 32 位进程等)。

对于每个进程,您可以同时查看按列或按进程显示的非托管内存(私有字节等)和托管内存(GC 集合、大对象堆等)。

sysinternals 的另一个很酷的工具是VMMAP http://technet.microsoft.com/en-us/sysinternals/dd535533。它是一个进程内存分析实用程序,显示不同类型的虚拟和物理内存类型的细分。

至于你的 120Mb 问题,你确实想检查注入到你的进程中的所有非托管 DLL,并且它们不是标准 Windows 安装或标准 DLL 进程集的一部分。对于如此大的分配,我当然会首先跟踪图形组件,因为它们以分配大内存块而闻名(特别是如果您谈论诸如 NDepend 之类的工具,is图形)。 Process Explorer 还可以跟踪 GDI 和 USER 对象的数量。

关于 GDI 主题,有一个免费工具,名为GDIView http://www.nirsoft.net/utils/gdi_handles.html此处提供了每个进程分配的 GDI 对象的详细信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用于分析进程中加载​​的本机 DLL 和程序集的内存占用的工具? 的相关文章

  • 改变方法中的结构

    如何更改外部方法中的结构 public void ChangeStruct MyStruct myStruct myStruct field1 10 return 当我在该方法之后将结构传递给 ChangeStruct 方法时 我希望更改
  • 从 C# 检测 powerpoint 形状上的事件

    是否有可能检测在 Powerpoint 形状 例如箭头 上发生的事件 到目前为止 我发现唯一的可能性是 selectitemchanged beforerightclick 和 beforedoubleclick 但无法找到检测其他内容的方
  • 为什么 IsAssignableFrom() 不适用于 int 和 double?

    这是错误的 typeof double IsAssignableFrom typeof int 这是错误的 typeof int IsAssignableFrom typeof double 但这有效 double a 1 0 int b
  • 如何查找局域网中所有主机上正在运行的程序的所有实例?

    出于实际目的 SqlDataSourceEnumerator 的作用是查找在 LAN 上的各个 PC 上运行的 SQL Server 的所有实例 是否有等效的方法可以查找任意应用程序的运行实例 编辑 好的 所以这只有效 因为这些应用程序有预
  • 字典 API(词汇)[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有人知道一个好的 NET 字典 API 吗 我对含义不感兴趣 而是我需要能够以多种不同的方式查询单词 返
  • System.Drawing.Image.Save 抛出ExternalException:GDI 中发生一般错误

    我有一个函数 它需要一个位图 复制它的一部分并将其保存为 8bpp tiff 结果图像的文件名是唯一的并且文件不存在 程序有权写入目标文件夹 void CropImage Bitmap map Bitmap croped new Bitma
  • R foreach问题(某些进程返回NULL)

    我遇到了问题foreach我正在 R 中使用的程序的一部分 该程序用于运行不同参数的模拟 然后将结果返回到单个列表 然后用于生成报告 当并非所有分配的模拟运行都在报告上实际可见时 就会出现问题 从各方面来看 似乎只有分配的运行的一个子集实际
  • 在 DataGridView 中隐藏行非常慢

    我在 Winforms 应用程序中有一个 DataGridView 大约有 1000 行 未绑定 和 50 列 隐藏一列需要整整 2 秒 当我想隐藏大约一半的行时 这就成为一个问题 private void ShowRows string
  • DotNET 应用程序中的 GDI 句柄

    我的纯 DotNET 库作为非托管桌面应用程序中的插件运行 我收到了稳定的 虽然低 崩溃报告流 这些报告似乎表明 GDI 句柄存在问题 错误消息中的字体等 恢复为系统字体 各种控件的显示崩溃 不久后发生大规模崩溃 我的窗体几乎没有控件 但我
  • ctypes 加载 dll 时没有错误消息,但什么也没发生

    我尝试在ctypes中使用windll LoadLibrary将dll文件导入python 尽管没有任何错误消息 但头文件中列出的函数似乎都没有成功加载 我想知道是dll文件有问题 还是我错误地使用了windll LoadLibrary方法
  • 调整巨大数组的大小

    我正在我的应用程序中处理巨大的数组 需要调整它们的大小 假设您有一个 2Gb 的阵列 并且想要将其大小调整为 3Gb 有没有办法在暂时不需要 5Gb 的情况下调整它的大小 例如 给定一个 1Gb 堆 使用 Xmx1G flag public
  • 如何获取Winforms窗体标题栏高度的大小?

    因此 如果它是工具窗口或可最小化的表单 我希望能够以编程方式获取其高度 这可能吗 如果是这样怎么办 您可以使用以下方法确定工具窗口和普通表单的标题栏高度 Rectangle screenRectangle this RectangleToS
  • 删除指向对象的 C++ 指针

    我认为删除命令会释放我分配的内存 有人可以解释为什么删除后我似乎仍然有内存在使用吗 class Test public int time int main Test e e new Test e gt time 1 cout lt lt e
  • 调整图像的亮度、对比度和伽玛值

    在 NET 中调整图像的亮度 对比度和伽玛值的简单方法是什么 c and gdi have a simple way to control the colors that are drawn It s basically a ColorMa
  • CompileAssemblyFromDom 抛出访问被拒绝异常

    代码 using var codeProvider new CSharpCodeProvider var compilerParameter new CompilerParameters assemblies assemblyName fa
  • c#.NET 和 sprintf 语法

    这段代码如何翻译成 C 具体来说是如何sprintf用C 实现 string output The user s logged in string loggedIn is string loggedOut isn t if TheUser
  • 枚举扩展方法

    在vs2008中 是否可以编写适用于任何枚举的扩展方法 我知道您可以针对特定枚举编写扩展方法 但我希望能够使用单个扩展方法对每个枚举进行处理 这可能吗 是的 只需针对基础进行编码Enum类型 例如 public static void So
  • 使用.Net/C# 计算集合的频率分布

    是否有一种快速 简单的方法来使用 Linq 或其他方式计算 Net 集合的频率分布 例如 任意长的 List 包含许多重复项 遍历列表并计算 跟踪重复次数的巧妙方法是什么 查找列表中重复项的最简单方法是将其分组 如下所示 var dups
  • 如何实例化 ODataQueryOptions

    我有一个工作 简化 ODataController用下面的方法 public class MyTypeController ODataController HttpGet EnableQuery ODataRoute myTypes pub
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况

随机推荐

  • 为什么 Rust 中的 range/loop 比 java 慢?

    我有一个程序 对于所有小于或等于输入的整数 找到可以表示为两个立方之和的数字 两次 又名拉马努金数字问题 我用 Java 和 Rust 编写了这个 但是 它在 Rust 中的运行速度比 Java 慢两倍多 我能做些什么来让它表现得更好 或者
  • 如何在 Sencha Architect 2 中添加“Ext.require”

    按照说明here http docs sencha com touch 2 0 guide native apis为了使用 Native API 我需要在代码中添加 Ext require 我如何在 Sencha Architect 2 中
  • make 函数如何接受三个参数?

    功能make是这样描述的 func make Type size IntegerType Type 当我们使用make对于切片有时它显示为 make int 0 10 所以我的问题是 怎样才能make函数需要三个参数 这size Integ
  • 如何将 SB3 文件转换为 EXE

    我正在 Scratch 3 上创建一个游戏 但是 当我完成它时 我想将其转换为 exe 文件 我该怎么做呢 我长期以来对游戏开发很感兴趣 甚至以前尝试过Unity 但我只是一个初学者 这对我来说太难了 所以我转向了 Scratch 对的 这
  • 添加到 UISearchDisplayController 时 UISearchBar 被剪裁在状态栏下方

    我希望我的搜索栏将其背景绘制在状态栏下方向上延伸 如下所示 这是上图对应的代码 void viewDidLoad super viewDidLoad self searchBar UISearchBar alloc init self se
  • Meteor 模板助手条件一致返回 false

    我对 Meteor 很陌生 但到目前为止我真的很喜欢在这个平台上编码 我遇到了一些障碍 似乎找不到正确的方法 我想创建一个辅助函数来检查纬度和经度 并根据某个预定义的范围进行检查 如果它落在这些范围之间 则返回 true 我已经包含了我当前
  • close() 没有正确关闭套接字

    我有一台多线程服务器 线程池 它使用 20 个线程处理大量请求 一个节点高达 500 秒 有一个侦听器线程接受传入连接并将它们排队以供处理程序线程处理 一旦响应准备好 线程就会向客户端写入并关闭套接字 一切似乎都很好 直到最近 一个测试客户
  • 如何将两个过程组合在一起来填充一个表,而不是两个过程中的每一个过程填充它自己的表?

    我使用 Sequel Pro 创建了两个表 每个表都在 MySQL 中填充了不同的过程 虽然每个表在运行相应的过程后都包含正确的信息 但我认为如果我更多地合并一些表 我的数据将不再那么分散 因此 我想做的是将两个表中的数据合并为一个 下面是
  • SQLite CURRENT_TIMESTAMP 总是 1970-01-01

    我有以下定义一个表 CREATE TABLE players playerid INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL name VARCHAR 20 NOT NULL UNIQUE added
  • 从chrome发送udp数据包

    网上查资料 如何将udp发送到udp node js服务器 https stackoverflow com questions 7451522 how to send udp to udp node js server JavaScript
  • 如何在 Edmx Designer 中对多对多关系启用级联删除

    我使用 VS2012 和实体设计器来生成数据库和模型 我有一个非常基本的场景 即 Table1 到 Table1 和 2JoinTable 到 Table2 比如学生 班级 学生班级 您可以在多个班级中拥有多个学生 我想要级联删除 因此 如
  • wix - 安装前删除旧程序文件夹

    我需要安装程序在安装程序开始复制新文件之前删除旧的安装目录 如果存在 该文件夹包含程序使用过程中生成的一些文件和子文件夹 它们不包含在安装程序中 因此 我创建了自定义操作来执行此操作 所以 一些代码 首先 自定义操作代码 没什么特别的 Cu
  • Java 运行时环境检测到致命错误:SIGSEGV (0xb) at pc=0x00002b2f7e9b2744, pid=28778, tid=1138739520

    我在执行程序时收到以下错误 而这种情况并不总是发生 代码中包含一些复杂的计算 数据量很大 有人可以帮助识别错误吗 A fatal error has been detected by the Java Runtime Environment
  • fmod 不正确吗? [复制]

    这个问题在这里已经有答案了 给定以下双打 是否fmod返回正确的值 double x 090 double y 003 double r fmod x y r 0 0029999999999999949 为什么r不 0 因为 像大多数十进制
  • 如何在 django 管理站点上授予用户权限

    我正在尝试授予用户对管理站点的有限访问权限 我以超级用户身份登录 并授予用户员工身份和模型权限 可以添加 可以更改 和 可以删除 问题是用户可以登录该网站 但看到以下消息 如果我给他超级用户身份 他可以编辑任何内容 但我想给他有限的访问权限
  • 如何安全地使用 UniqueEntity(在具有多个同时用户的网站上)

    聪明的人可以分享他们用来避免 Doctrine Symfony 中这种基本且常见的并发问题的设计模式吗 设想 每个用户必须有一个唯一的用户名 失败解决方案 Add a 独特的实体 https symfony com doc 3 1 refe
  • 在 Java 中以编程方式设置 Linux 环境变量

    我可以通过以下方式运行 Linux 命令RunTime班级 有没有办法以编程方式从 Java 设置 Linux 全局环境 我想通过 Java 模拟以下 Linux 命令语句 root machine tmp export TEST v2 我
  • linux + 验证文件是文本还是二进制

    如何在不打开文件的情况下验证文件是二进制文件还是文本文件 恐怕是薛定谔的猫 在不打开文件的情况下无法确定文件的内容 文件系统不存储与内容相关的元数据 如果不打开文件不是硬性要求 那么有许多解决方案可供您使用 Edit 许多评论和答案都建议f
  • Vue 关闭组件返回避免直接改变 prop

    我有一个想要在不同页面上使用的组件 嗯 在第一次切换之前它运行良好 它显示得像以前一样 但是当我单击 关闭 按钮时 它会关闭 但控制台输出 Vue warn 避免直接改变 prop 因为该值将是 每当父组件重新渲染时都会被覆盖 相反 使用
  • 用于分析进程中加载​​的本机 DLL 和程序集的内存占用的工具?

    根据任务管理器 我有一个进程持有 130MB 内存 根据任务管理器 只有 11MB 的活动 NET 对象dotTrace http www jetbrains com profiler 所以我想知道另外 120MB 发生了什么 我需要一个工