识别C#应用程序使用的本机内存的所有者
我正在开发一个C#应用程序,该应用程序设计为始终在系统托盘中运行。因此,我希望最小化应用程序空闲时使用的内存量。使用Windows perfmon和Windows任务管理器,我得到了一些空闲内存使用的数据识别C#应用程序使用的本机内存的所有者,c#,windows,memory,C#,Windows,Memory,我正在开发一个C#应用程序,该应用程序设计为始终在系统托盘中运行。因此,我希望最小化应用程序空闲时使用的内存量。使用Windows perfmon和Windows任务管理器,我得到了一些空闲内存使用的数据 Windows XP任务管理器-内存使用-96300K 表演 .NET CLR内存 #所有堆中的字节数-34513708 #提交的字节总数-40591360 #保留字节总数-50319360 我认为这些数字意味着Windows为我的应用程序分配了96MB的内存。其中50MB已分配给
- Windows XP任务管理器-内存使用-96300K
- 表演
- .NET CLR内存
- #所有堆中的字节数-34513708
- #提交的字节总数-40591360
- #保留字节总数-50319360
- .NET CLR内存
- 私人的
- 总数-72mb
- 托管堆-25mb
- 堆栈-16mb(看起来相当大)
- 私有数据-13mb(不确定这是什么)
- 映像-8mb(主要是.NET DLL)
- 页面表格-6mb(看起来相当大)
- 堆-3mb
- Windows XP任务管理器-内存使用-43628K
- 表演
- .NET CLR内存
- #所有堆中的字节数-20mb
- #提交的字节总数-23mb
- #总保留字节数-50mb
- .NET CLR内存
这表明CLR保留的内存比分配给进程的内存多。显然,这不可能是真的,因此TaskManager必须只显示当前已分页的内容。请注意总内存使用量(我不确定TaskManager显示的是什么数字;Windows工具在使用不同术语表示相同概念方面的历史记录不好)和“#总保留字节数”之间的差异也可以由CLR使用,而不是由托管堆使用(因此,CLR的本机分配、加载的DLL等也可能在这里起作用)
您可能需要签出以获得更详细的信息。您需要了解虚拟内存和工作集之间的区别,这两种内存度量完全不同。《Windows内部构件》是一本值得一读的好书。