【发布时间】:2012-06-05 18:49:39
【问题描述】:
所以我有两个可以协同工作的应用程序。一种是使用自定义内存管理器用本机 C++ 编写的。此内存管理器管理从起始地址到 startAddress + size 的连续字节块。我还有一个 WPF 应用程序,它读取文本文件(只是内存管理器中的字节倒入文本文件)并显示有关它的各种统计信息。我想知道是否有一种方法可以在 WPF 应用程序中实时查看本机 c++ 应用程序的内存。所以一些伪逻辑可能是:
- 本机应用程序可能会以某种方式公开池的起始地址和大小
- WPF 应用程序获取从该起始地址到起始地址加上大小的所有字节
我已经探索了 .NET 中的 Process 类,但我没有看到任何类似 MemoryPool 的东西,而且我认为该对象的 StartAddress 指向应用程序的 very 开头,而不是第一个已分配堆。
这里的任何帮助将不胜感激!
【问题讨论】:
-
本机代码正在使用的内存块有什么特殊/特定的吗?是否可以将其更改为针对内存映射文件工作?
-
您也可以 PInvoke
ReadProcessMemory。我不知道有这样的托管 API。 -
您需要查看其他进程的全部内存,还是只需要能够共享一块内存?
-
我只需要查看本机应用程序内存的特定块。我不知道是否有 PInvoke 的托管等效项。不幸的是,本机应用程序无法写入文件,因为它是实时运行的。我希望托管应用程序“附加”到流程中。
-
如果这仍然是一个问题 - 不要被内存映射文件的名称所拖延 - 它们可以是由页面文件支持的内存块,就像任何其他部分一样您的进程的内存。如果你想要的话,这里是unmanaged side 和managed side,可以从中拼凑出一个解决方案。
标签: c++ .net wpf memory memory-management