有没有可能,我们能想象一下在一个进程中,哪些内容全部进入堆栈,哪些内容全部进入堆(可能是c#)?

有没有可能,我们能想象一下在一个进程中,哪些内容全部进入堆栈,哪些内容全部进入堆(可能是c#)?,c#,debugging,stack-trace,heap-memory,diagnostic-tools,C#,Debugging,Stack Trace,Heap Memory,Diagnostic Tools,我开始探索Clrmd,以可视化所有进入堆栈和堆的变量,最终得到堆中的一些(>1000)对象集,其中大多数是字符串类型的,不是我在过程中创建的,还有一个stacktrace,它只提供有关方法的信息(stackframes)在每个线程中,而不是关于方法中存在的变量和其他属性 我的问题是: 为什么以及如何在堆中创建这些数量的字符串对象,即使我在程序(c代码)中没有使用任何字符串 是否有任何方法可以过滤堆对象,以便使用clrmd或任何其他nuget包或工具仅显示程序使用的对象(我的c#代码留下了程序内部

我开始探索Clrmd,以可视化所有进入堆栈和堆的变量,最终得到堆中的一些(>1000)对象集,其中大多数是字符串类型的,不是我在过程中创建的,还有一个stacktrace,它只提供有关方法的信息(stackframes)在每个线程中,而不是关于方法中存在的变量和其他属性

我的问题是:

  • 为什么以及如何在堆中创建这些数量的字符串对象,即使我在程序(c代码)中没有使用任何字符串
  • 是否有任何方法可以过滤堆对象,以便使用clrmd或任何其他nuget包或工具仅显示程序使用的对象(我的c#代码留下了程序内部创建的对象)
  • 我可以在另一个进程中显示使用进程堆栈框架(我的C#代码)的方法中使用的变量集(局部变量)

  • 亲爱的Ganesh,您可以尝试Red gate[ANTS Memory Profiler]来跟踪内存中的对象,并按任何类型对其进行过滤。。。请点击下面的链接


    我刚读到关于ants memory profiler的文章,但它不能回答我的问题(1,2,3),无论如何我会试试。谢谢你的考虑。