同一个AppPool中的应用程序共享变量?
问题描述:
我使用Asp.net
FW 4.6。同一个AppPool中的应用程序共享变量?
我有需要读取(constatntly)的预定值,其目的是改变同一应用程序池下的两个应用程序。
静态变量不能用于beucase不同的充应用程序(甚至在同一应用程序池) - 将不被共享。
DB /文件/服务器是已知的选项。
但是:
问:
有没有办法,我可以写,可以在MEM值存储任何代码,这将是通过访问多个应用程序是在相同的应用程序池?
是这样的:
MyAppPool
App1 -> func("royi") = 1
App2 -> var a= func2("royi"); //1
答
进程间通信的所有方面,如Memory Mapped Files和Named Pipes也可以用于跨单个程序池内的应用程序共享数据,参见例如Sharing memory between two applications。
因为在相同的应用程序池的所有应用程序驻留在同一工序而只是AppDomain的界限分开,你有一些额外的选项:
- 使用 MarshalByRefObject 跨应用程序域边界访问对象实例。有 已经可用包装,使用MarshalByRefObject实现 跨AppDomain单例,例如Stephen Cleary的 CrossDomainSingleton 或this one。
- 使用指针和unsafe代码直接访问内存的分配Marshal.AllocHGlobal,特别是如果速度是你的关心。但是你将不得不使用上述方法之一在应用程序之间共享分配内存的内存地址。