我有一个用C#编写的COM +应用程序(ServicedComponent。)应用程序池大小>在所有情况下都是1。我正在使用SharedPropertyGroups来保留和共享数据。从我的测试来看,不清楚应用程序的所有正在运行的实例是否共享相同的值。
存储在SharedPropertyGroup中的属性是否在同一COM +应用程序的所有实例之间共享?
答案 0 :(得分:1)
每个应用程序池(DLLHost进程)都将获得它自己的共享属性管理器。来自COM+ Shared Property Manager Concepts:
"存储在SPM中的共享属性仅适用于在同一进程中运行的对象。"
因此,共享属性管理器将允许您在一个应用程序(池实例)内共享瞬态。
如果要在多个进程之间共享状态,那么您可能希望查看进程外缓存方法(例如Windows Server AppFabric Caching或数据库,具体取决于要求)。
另请参阅.NET Enterprise Services and COM+ 1.5 Architecture,其中介绍了使用应用程序池时的一些问题:
共享属性管理器(SPM)使用的内存是特定于进程的。 应用程序池可能会影响任何假设它的应用程序 在该计算机上使用SPM的唯一实例。已经没有了 任何常见的最高级数据存储(因为组件可以跨越 使用应用程序的COM +组件的所有实例的进程) 池。或者,您可以使用缓存的中间层数据库 存储不仅会跨进程中的实例而且会跨越实例的公共状态 过程也是如此。这样做时,您可能需要考虑使用 池化组件,用于保持与数据库的持久连接 专门用于中间层序列化操作。事实上, 即使没有应用程序池,这是一个更好的选择 关于锁定和SPM性能的问题。