加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

识别C#应用程序使用的本机内存的所有者

发布时间:2020-12-15 21:23:01 所属栏目:百科 来源:网络整理
导读:我正在开发一个C#应用程序,它可以一直在系统托盘中运行.因此,我希望最小化应用程序在空闲时使用的内存量.使用 Windows perfmon和Windows任务管理器我得到了一些空闲内存使用数据. Windows XP TaskManager – 内存使用 – 96,300K PerfMon .NET CLR内存 所有
我正在开发一个C#应用程序,它可以一直在系统托盘中运行.因此,我希望最小化应用程序在空闲时使用的内存量.使用 Windows perfmon和Windows任务管理器我得到了一些空闲内存使用数据.

> Windows XP TaskManager – 内存使用 – 96,300K
> PerfMon

> .NET CLR内存

>所有堆中的#Bytes – 34,513,708
> #Total committed Bytes – 40,591,360
> #Total保留字节数 – 50,319,360

我认为这些数字意味着我的应用程序已经被Windows分配了96MB的内存.其中50MB已分配给CLR. CLR分发了40mb.

有没有办法弄清楚尚未分配给CLR的其他46mb内存用于什么?我假设这将是用于将DLL加载到进程中的内存和此本机代码使用的内存的组合.

编辑:我已下载VMMap并找到以下内容.

>私人

>总计 – 72mb
>管理堆 – 25mb
>堆栈 – 16mb(看起来相当大)
>私人数据 – 13mb(不知道这是什么)
>图像 – 8mb(主要是.NET DLL)
>页面表 – 6mb(看起来相当大)
>堆 – 3mb

任何人都可以建议对Stack,Private Data和Page Table数字进行解释吗?

注意:我最初引用的计数器现在显示了一些奇怪的数字.

> Windows XP TaskManager – 内存使用 – 43,428K
> PerfMon

> .NET CLR内存

>所有堆中的#字节 – 20mb
> #Total committed Bytes – 23mb
> #Total保留字节数 – 50mb

这表明CLR保留的内存比分配给进程的内存多.显然这不可能是真的,所以TaskManager必须只显示当前被分页的内容.

解决方法

请注意,总内存使用量之间的差异(我不完全确定TaskManager显示的数字; Windows工具有关于使用不同术语来表示相同概念的错误历史记录)和“#Total reserved bytes”也可能被CLR使用,只是不是由托管堆(所以CLR的原生分配,加载的DLL等也可能在这里帐户).

您可能需要结帐Sysinternals VMMap以获取更多详细信息.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读