.NET查看其他应用程序的内存

时间:2012-05-31 13:42:35

标签: c++ .net wpf memory memory-management

所以我有两个一起工作的应用程序。一个是使用自定义内存管理器以本机c ++编写的。该内存管理器管理从起始地址到startAddress + size的连续字节块。我还有一个WPF应用程序,它读取文本文件(只是内存管理器中的字节倾注到文本文件中)并显示有关它的各种统计信息。我想知道是否有一种方法可以实时查看WPF应用程序中的本机c ++应用程序的内存。所以一些伪逻辑可能是:

  • 本机应用程序可以以某种方式公开池的起始地址和大小
  • WPF应用程序从起始地址到起始地址加上大小
  • 获取所有字节

我在.NET中探索了Process类,但是我没有看到像MemoryPool这样的东西,我认为该对象的StartAddress指向应用程序的 very 开头,而不是第一个堆分配。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

Damien_The_Unbeliever在评论中发布了不可避免的最佳解决方案。我很抱歉没有及早发布这个问题,以防其他人遇到这个问题。我们的想法是使用memory mapped files在您的应用程序之外显示一块内存。基本上,您创建一个内存块并为其指定一个字符串名称(标识符)。知道这个标识符的任何其他应用程序都可以读取该内存块,就像它们自己一样(假设它们使用内存映射文件来查看内存,因为它不仅仅是本质上可见的)。需要注意的是,读取内存的应用程序必须能够解析内存并理解它。

我用它来为我的引擎在C#中创建一个实时内存查看器。该引擎有一个底层分配器和内存管理器,它现在写入一个内存块,该内存块也由内存映射文件指向。 C#应用程序以给定的间隔读取此内存,并以相关的方式显示给用户(开发人员)。最好的部分是,因为本机端根本不需要改变以使用此实现,这根本不会影响应用程序的性能。