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

.NET View Other Application's Memory

本文关键字:内存 应用程序 其他 NET      更新时间:2023-10-16

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

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

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

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

Damien_The_Unbeliever在

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

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