1

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

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

我已经探索了 .NET 中的 Process 类,但我没有看到任何类似 MemoryPool 的东西,而且我认为该对象的 StartAddress 指向应用程序的开始,而不是第一个堆分配。

这里的任何帮助将不胜感激!

4

1 回答 1

1

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

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

于 2013-08-16T19:45:46.993 回答