C# 在.Net中共享内存中的对象

C# 在.Net中共享内存中的对象,c#,.net,memory,object,C#,.net,Memory,Object,是否可以在.NET应用程序的内存空间中共享自定义对象模型,而不在每个正常运行的应用程序的内存范围中复制工作内存?这不是不可能的,但非常困难 可以在CLR profiler的私有版本下运行程序。注入到进程中的探查器DLL随时都知道对象的确切位置。然后,不同的进程可以使用本机代码共享数据。我不太确定是否可能存在重复,但[Shared memory in.Net][1]和[Shared memory in.2 process][2]线程可能会有所帮助。[1] :[2]:是的,MMF似乎是唯一的选择。这

是否可以在.NET应用程序的内存空间中共享自定义对象模型,而不在每个正常运行的应用程序的内存范围中复制工作内存?

这不是不可能的,但非常困难


可以在CLR profiler的私有版本下运行程序。注入到进程中的探查器DLL随时都知道对象的确切位置。然后,不同的进程可以使用本机代码共享数据。

我不太确定是否可能存在重复,但[Shared memory in.Net][1]和[Shared memory in.2 process][2]线程可能会有所帮助。[1] :[2]:是的,MMF似乎是唯一的选择。这似乎不合理。1) 探查器是一种工具,它不管理内存2)CLR知道对象的确切位置,但这并不意味着您可以访问这些对象,因为CLR可以移动它们,您的指针将变得无效。是的,CLR探查器有两个二进制文件:clrprofiler.exe和profilerobj.dll。profilerobj.dll被注入托管进程并从CLR获取通知。所以它可以知道“一切”,但仍然没有意义。您如何使用它跨进程共享内存?如果GC移动或收集对象会怎么样?其他应用程序怎么可能知道这一点?同样,CLR事件探查器是一个事件探查器,一种用于解决性能相关问题的工具。这与内存管理无关,当然,除非您需要分析应用程序以收集数据,否则它不会被设计用于生产。当GC移动对象时,它首先通知探查器。因此profilerobj.dll知道每个托管对象的地址。CLRProfiler需要管理员权限才能使用。这是ICorProfilerCallback::MovedReferences的文档