Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
识别C#应用程序使用的本机内存的所有者_C#_Windows_Memory - Fatal编程技术网

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

识别C#应用程序使用的本机内存的所有者,c#,windows,memory,C#,Windows,Memory,我正在开发一个C#应用程序,该应用程序设计为始终在系统托盘中运行。因此,我希望最小化应用程序空闲时使用的内存量。使用Windows perfmon和Windows任务管理器,我得到了一些空闲内存使用的数据 Windows XP任务管理器-内存使用-96300K 表演 .NET CLR内存 #所有堆中的字节数-34513708 #提交的字节总数-40591360 #保留字节总数-50319360 我认为这些数字意味着Windows为我的应用程序分配了96MB的内存。其中50MB已分配给

我正在开发一个C#应用程序,该应用程序设计为始终在系统托盘中运行。因此,我希望最小化应用程序空闲时使用的内存量。使用Windows perfmon和Windows任务管理器,我得到了一些空闲内存使用的数据

  • Windows XP任务管理器-内存使用-96300K
  • 表演
    • .NET CLR内存
      • #所有堆中的字节数-34513708
      • #提交的字节总数-40591360
      • #保留字节总数-50319360
我认为这些数字意味着Windows为我的应用程序分配了96MB的内存。其中50MB已分配给CLR。CLR已经分发了40mb的数据

有没有办法计算出没有分配给CLR的其他46mb内存的用途?我假设这是用于将DLL加载到进程中的内存和本机代码使用的内存的组合

编辑:我已经下载了VMMap并发现了以下内容

  • 私人的
    • 总数-72mb
    • 托管堆-25mb
    • 堆栈-16mb(看起来相当大)
    • 私有数据-13mb(不确定这是什么)
    • 映像-8mb(主要是.NET DLL)
    • 页面表格-6mb(看起来相当大)
    • 堆-3mb
有人能为堆栈、私有数据和页表图形提供解释吗

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

  • Windows XP任务管理器-内存使用-43628K
  • 表演
    • .NET CLR内存
      • #所有堆中的字节数-20mb
      • #提交的字节总数-23mb
      • #总保留字节数-50mb

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

请注意总内存使用量(我不确定TaskManager显示的是什么数字;Windows工具在使用不同术语表示相同概念方面的历史记录不好)和“#总保留字节数”之间的差异也可以由CLR使用,而不是由托管堆使用(因此,CLR的本机分配、加载的DLL等也可能在这里起作用)


您可能需要签出以获得更详细的信息。

您需要了解虚拟内存和工作集之间的区别,这两种内存度量完全不同。《Windows内部构件》是一本值得一读的好书。