同一 AppPool 中跨应用程序的共享变量?
Shared variable across applications within the same AppPool?
我正在使用 Asp.net
FW 4.6。
我在同一个应用程序池下有两个应用程序,它们需要(不断地)读取要更改的预定义值。
不能使用静态变量,因为不同的应用程序(即使在同一个应用程序池下)- 不会共享。
DB/File/Server 是已知选项。
但是:
问题:
是否有任何我可以编写的代码可以存储在 mem 值中,这些值可以通过同一应用程序池下的多个应用程序访问?
类似于:
MyAppPool
App1 -> func("royi") = 1
App2 -> var a= func2("royi"); //1
进程间通信的所有方式,如Memory Mapped Files and Named Pipes can also be used for sharing data across applications within single AppPool, see for example Sharing memory between two applications.
因为同一个 AppPool 中的所有应用都驻留在同一个进程中,并且仅由 AppDomain 边界分隔,所以您有一些额外的选择:
- 使用
MarshalByRefObject
跨 AppDomain 边界访问对象实例。有
已经可用的包装器使用 MarshalByRefObject 来实现
跨 AppDomain 单例,例如 Stephen
克利里的
CrossDomainSingleton
或者 这个
一个.
- 使用指针和 unsafe code to directly access memory allocated by Marshal.AllocHGlobal,尤其是在您关心速度的情况下。但是您将不得不使用上述方法之一在应用程序之间共享已分配内存的内存地址。
我正在使用 Asp.net
FW 4.6。
我在同一个应用程序池下有两个应用程序,它们需要(不断地)读取要更改的预定义值。
不能使用静态变量,因为不同的应用程序(即使在同一个应用程序池下)- 不会共享。
DB/File/Server 是已知选项。
但是:
问题:
是否有任何我可以编写的代码可以存储在 mem 值中,这些值可以通过同一应用程序池下的多个应用程序访问?
类似于:
MyAppPool
App1 -> func("royi") = 1
App2 -> var a= func2("royi"); //1
进程间通信的所有方式,如Memory Mapped Files and Named Pipes can also be used for sharing data across applications within single AppPool, see for example Sharing memory between two applications.
因为同一个 AppPool 中的所有应用都驻留在同一个进程中,并且仅由 AppDomain 边界分隔,所以您有一些额外的选择:
- 使用 MarshalByRefObject 跨 AppDomain 边界访问对象实例。有 已经可用的包装器使用 MarshalByRefObject 来实现 跨 AppDomain 单例,例如 Stephen 克利里的 CrossDomainSingleton 或者 这个 一个.
- 使用指针和 unsafe code to directly access memory allocated by Marshal.AllocHGlobal,尤其是在您关心速度的情况下。但是您将不得不使用上述方法之一在应用程序之间共享已分配内存的内存地址。